硬汉嵌入式论坛

 找回密码
 立即注册
查看: 8910|回复: 2
收起左侧

[μCGUI] UCGUI消息问题

[复制链接]

1

主题

0

回帖

1

积分

新手上路

积分
1
发表于 2012-11-19 15:04:44 | 显示全部楼层 |阅读模式
本人刚刚学习UCGUI,学习到消息的时候感到挺茫然。比如在framewin的client里创建一个button后,如果用鼠标点击该button后UCGUI是如何发送消息给framewin 的回调函数的?是不是要用户自己发送啊?请各位高手帮帮我这个菜鸟!多谢!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2012-11-19 16:04:13 | 显示全部楼层
不需要自己发,只要在回调函数里面处理按下后要处理的东西就可以了。
给你发个例子,是VC里面自带的,把这个看懂,有什么不懂得问我。

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2012-11-19 16:07:55 | 显示全部楼层

在文件夹 \\Sample\\GUI 里面的WM_Video.c文件
  1. /*
  2. *********************************************************************************************************
  3. *                                             uC/GUI V4.04
  4. *                        Universal graphic software for embedded applications
  5. *
  6. *                       (c) Copyright 2002, Micrium Inc., Weston, FL
  7. *                       (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
  8. *
  9. *              礐/GUI is protected by international copyright laws. Knowledge of the
  10. *              source code may not be used to write a similar product. This file may
  11. *              only be used in accordance with a license and should not be redistributed
  12. *              in any way. We appreciate your understanding and fairness.
  13. *
  14. ----------------------------------------------------------------------
  15. File        : WM_Video.c
  16. Purpose     : Demonstrate the use of the visibility message
  17. Note        : Please add the following line to GUIConf.h
  18.   #define WM_SUPPORT_NOTIFY_VIS_CHANGED  1
  19. ----------------------------------------------------------------------
  20. */
  21. #include <stddef.h>
  22. #include <stdio.h>
  23. #include "WM.h"
  24. #include "GUI.h"
  25. #include "FRAMEWIN.h"
  26. #include "BUTTON.h"
  27. static void _cbFrameWinTest(WM_MESSAGE* pMsg);
  28. /*********************************************************************
  29. *
  30. *       Defines
  31. *
  32. **********************************************************************
  33. */
  34. #define MAX_WINDOWS   5
  35. /*********************************************************************
  36. *
  37. *       Static data
  38. *
  39. **********************************************************************
  40. */
  41. static WM_HWIN _ahWin[MAX_WINDOWS];
  42. static char    _IsCompletelyVis;     /* 用于记录是否可见,从而来记录 */
  43. /*********************************************************************
  44. *
  45. *       Static code
  46. *
  47. **********************************************************************
  48. */
  49. /*********************************************************************
  50. *
  51. *       _CreateWindow
  52. *    _ahWin[i] 在这里主要是用来记录那些需要重建
  53. */
  54. static void _CreateWindow(void) {
  55.   unsigned i;
  56.   for (i = 0; i < MAX_WINDOWS; i++) {
  57.     if (_ahWin[i] == 0) {
  58.       WM_HWIN hWin;
  59.       char ac[32];
  60.       sprintf(ac, "Test window %d", i + 1);
  61.       hWin = FRAMEWIN_CreateEx(5 + 10 * i, 135 + 10 * i, 120, 60, 0, WM_CF_SHOW, FRAMEWIN_CF_MOVEABLE, 0, ac, _cbFrameWinTest);
  62.       FRAMEWIN_SetClientColor(hWin, GUI_INVALID_COLOR);
  63.       _ahWin[i] = hWin;
  64.       break;
  65.     }
  66.   }
  67. }
  68. /*********************************************************************
  69. *
  70. *       _DeleteWindow
  71. *      是否可见的新命令
  72. */
  73. static void _DeleteWindow(void) {
  74.   unsigned i;
  75.   for (i = 0; i < MAX_WINDOWS; i++) {
  76.     if (WM_IsVisible(_ahWin[i])) {
  77.       WM_DeleteWindow(_ahWin[i]);
  78.       _ahWin[i] = 0;
  79.       break;
  80.     }
  81.   }
  82. }
  83. /*********************************************************************
  84. *
  85. *       _ShowWindow
  86. */
  87. static void _ShowWindow(void) {
  88.   unsigned i;
  89.   for (i = 0; i < MAX_WINDOWS; i++) {
  90.     if (_ahWin[i] != 0) {
  91.       if (WM_IsVisible(_ahWin[i]) == 0) {
  92.         WM_ShowWindow(_ahWin[i]);
  93.         break;
  94.       }
  95.     }
  96.   }
  97. }
  98. /*********************************************************************
  99. *
  100. *       _HideWindow
  101. */
  102. static void _HideWindow(void) {
  103.   unsigned i;
  104.   for (i = 0; i < MAX_WINDOWS; i++) {
  105.     if (WM_IsVisible(_ahWin[i])) {
  106.       WM_HideWindow(_ahWin[i]);
  107.       break;
  108.     }
  109.   }
  110. }
  111. /*********************************************************************
  112. *
  113. *       Static code, callbacks
  114. *
  115. **********************************************************************
  116. */
  117. /*********************************************************************
  118. *
  119. *       _cbBkWin
  120. */
  121. static void _cbBkWin(WM_MESSAGE* pMsg) {
  122.   switch (pMsg->MsgId) {
  123.   case WM_PAINT:
  124.     /* 这里主要是用于重绘 */   
  125.       GUI_SetBkColor(GUI_BLACK);
  126.       GUI_Clear();
  127.       break;
  128.   case WM_NOTIFY_PARENT:
  129.     /* 这里主要是按键的处理 */
  130.     if (pMsg->Data.v == WM_NOTIFICATION_RELEASED) {
  131.       int Id = WM_GetId(pMsg->hWinSrc);
  132.       switch (Id) {
  133.       case GUI_ID_BUTTON0:  /* Create window */
  134.         _CreateWindow();
  135.         break;
  136.       case GUI_ID_BUTTON1:  /* Delete window */
  137.         _DeleteWindow();
  138.         break;
  139.       case GUI_ID_BUTTON2:  /* Show window   */
  140.         _ShowWindow();
  141.         break;
  142.       case GUI_ID_BUTTON3:  /* Hide window   */
  143.         _HideWindow();
  144.         break;
  145.       }
  146.     }
  147.     break;
  148.   default:
  149.     WM_DefaultProc(pMsg);
  150.   }
  151. }
  152. /*********************************************************************
  153. *
  154. *       _cbFrameWinVideo
  155. *     根据是否可见,从而来改变颜色
  156. */
  157. static void _cbFrameWinVideo(WM_MESSAGE* pMsg) {
  158.   switch (pMsg->MsgId) {
  159.   case WM_PAINT:
  160.     if (_IsCompletelyVis) {
  161.       GUI_SetBkColor(GUI_DARKGREEN);
  162.       GUI_Clear();
  163.       GUI_SetColor(GUI_WHITE);
  164.       GUI_DispStringAt("Completely visible", 5, 5);
  165.     } else {
  166.       GUI_SetBkColor(GUI_GRAY);
  167.       GUI_Clear();
  168.       GUI_SetColor(GUI_WHITE);
  169.       GUI_DispStringAt("Not completely visible", 5, 5);
  170.     }
  171.     break;
  172.   case WM_NOTIFY_VIS_CHANGED:
  173.     {
  174.       WM_HWIN hWin;
  175.       int IsCompletelyVis;
  176.       hWin = WM_GetClientWindow(pMsg->hWin);
  177.       IsCompletelyVis = WM_IsCompletelyVisible(hWin);
  178.       if (_IsCompletelyVis != IsCompletelyVis) {
  179.         _IsCompletelyVis = IsCompletelyVis;
  180.         WM_InvalidateWindow(hWin);    /* Only required if content changes if partially hidden */
  181.       }
  182.     }
  183.     break;
  184.   default:
  185.     WM_DefaultProc(pMsg);
  186.   }
  187. }
  188. /*********************************************************************
  189. *
  190. *       _cbFrameWinTest
  191. */
  192. static void _cbFrameWinTest(WM_MESSAGE* pMsg) {
  193.   switch (pMsg->MsgId) {
  194.   case WM_PAINT:
  195.     GUI_SetBkColor(GUI_DARKRED);
  196.     GUI_Clear();
  197.     break;
  198.   default:
  199.     WM_DefaultProc(pMsg);
  200.   }
  201. }
  202. /*********************************************************************
  203. *
  204. *       Public code
  205. *
  206. **********************************************************************
  207. */
  208. /*********************************************************************
  209. *
  210. *       MainTask
  211. */
  212. void MainTask(void) {
  213.   FRAMEWIN_Handle hWinVideo;
  214.   BUTTON_Handle hBut;
  215.   GUI_Init();
  216.   
  217.   /* 设置桌面窗口的回调函数 */
  218.   WM_SetCallback(WM_HBKWIN, _cbBkWin);
  219.   /* Create buttons */
  220.   /* 创建按键 */
  221.   hBut = BUTTON_CreateEx(240,  5, 75, 18, WM_HBKWIN, WM_CF_SHOW, 0, GUI_ID_BUTTON0);
  222.   BUTTON_SetText(hBut, "Create win");
  223.   hBut = BUTTON_CreateEx(240, 25, 75, 18, WM_HBKWIN, WM_CF_SHOW, 0, GUI_ID_BUTTON1);
  224.   BUTTON_SetText(hBut, "Delete win");
  225.   hBut = BUTTON_CreateEx(240, 45, 75, 18, WM_HBKWIN, WM_CF_SHOW, 0, GUI_ID_BUTTON2);
  226.   BUTTON_SetText(hBut, "Show win");
  227.   hBut = BUTTON_CreateEx(240, 65, 75, 18, WM_HBKWIN, WM_CF_SHOW, 0, GUI_ID_BUTTON3);
  228.   BUTTON_SetText(hBut, "Hide win");
  229.   /* Create framewin video */
  230.   /* 创建一个框架窗口 */
  231.   hWinVideo = FRAMEWIN_CreateEx(5, 5, 170, 120, 0, WM_CF_SHOW, FRAMEWIN_CF_MOVEABLE, 0, "Video window", _cbFrameWinVideo);
  232.   FRAMEWIN_SetClientColor(hWinVideo, GUI_INVALID_COLOR);
  233.   /* Create test windows */
  234.   _CreateWindow();
  235.   _CreateWindow();
  236.   _CreateWindow();
  237.   while (1) {
  238.     GUI_Delay(1000);
  239.   }
  240. }
  241. /**************************** end of file ***************************/
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-18 03:06 , Processed in 0.172438 second(s), 32 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表