你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【安富莱STemWin教程】第33章 窗口管理器之消息类型

[复制链接]
baiyongbin2009 发布时间:2015-2-14 19:57
特别说明:完整STemWin的1-60期教程和配套实例下载地址:链接
第33章 窗口管理器之消息类型

    本期教程开始讲解STemWin的消息类型,这部分知识也非常的重要,大家可以不懂消息的通信机制,但必须的知道简单的通信过程。
    33. 1  消息结构
    33. 2 消息类型
    33. 3 系统类型消息实例
    33. 4 指针输入设备(PID)类型消息实例
    33. 5 通知代码类型消息实例
    33. 6 总结
33.1 消息结构
    回调例程被调用时,它会收到以其pMsg参数指定的消息。此消息实际上是一个WM_MESSAGE数据结构,其元素定义如下。
数据类型
元素
描述
int
MsgId
消息的类型
WM_HWIN
hWin
目标窗口
WM_HWIN
hWinSrc
源窗口
void*
Data.p
数据指针
int
Data.v
数据值
33.2 消息类型
    STemWin支持的消息类型主要分为以下三类(STemWin5.22支持的类型)
系统定义的消息类型:
33.1.png
指针输入设备(PID)消息类型:
33.2.png
通知代码类型:
33.3.png
33.4.png

用户定义消息类型:
33.5.png


收藏 评论6 发布时间:2015-2-14 19:57

举报

6个回答
baiyongbin2009 回答时间:2015-2-14 20:00:02
33.3 系统类型消息实例
    下面我们通过一个具体的实例来讲解系统消息类型。这里我们通过前面讲的uCGUIBulder4.0创建一个如下的对话框(关于对话框的内容会在后面的教程跟大家详细讲解)。
33.6.png
建立以后生成的代码如下(重点看系统消息部分)
  1. #include <stddef.h>
  2. #include "GUI.h"
  3. #include "DIALOG.h"

  4. #include "WM.h"
  5. #include "BUTTON.h"
  6. #include "CHECKBOX.h"
  7. #include "DROPDOWN.h"
  8. #include "EDIT.h"
  9. #include "FRAMEWIN.h"
  10. #include "LISTBOX.h"
  11. #include "MULTIEDIT.h"
  12. #include "RADIO.h"
  13. #include "SLIDER.h"
  14. #include "TEXT.h"
  15. #include "PROGBAR.h"
  16. #include "SCROLLBAR.h"
  17. #include "LISTVIEW.h"


  18. //EventsFunctionList
  19. void OnButtonClicked(WM_MESSAGE * pMsg);
  20. void OnButtonReleased(WM_MESSAGE * pMsg);
  21. void OnButtonMovedOut(WM_MESSAGE * pMsg);
  22. //EndofEventsFunctionList

  23. /*********************************************************************
  24. *
  25. *       Dialog resource
  26. *
  27. * This table conatins the info required to create the dialog.
  28. * It has been created by ucGUIbuilder.
  29. */

  30. static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  31.     { FRAMEWIN_CreateIndirect,  "armfly",            0,                       0,  0,  800,480,FRAMEWIN_CF_MOVEABLE,0},
  32.     { BUTTON_CreateIndirect,    "BUTTON0",           GUI_ID_BUTTON0,          82, 122,162,37, 0,0},
  33.     { BUTTON_CreateIndirect,    "BUTTON1",           GUI_ID_BUTTON1,          357,123,152,35, 0,0}
  34. };



  35. /*****************************************************************
  36. **      FunctionName:void PaintDialog(WM_MESSAGE * pMsg)
  37. **      Function: to initialize the Dialog items
  38. **                                                      
  39. **      call this function in _cbCallback --> WM_PAINT
  40. *****************************************************************/

  41. void PaintDialog(WM_MESSAGE * pMsg)
  42. {
  43.     WM_HWIN hWin = pMsg->hWin;

  44. }

  45. /*****************************************************************
  46. **      FunctionName:void InitDialog(WM_MESSAGE * pMsg)
  47. **      Function: to initialize the Dialog items
  48. **                                                      
  49. **      call this function in _cbCallback --> WM_INIT_DIALOG
  50. *****************************************************************/

  51. void InitDialog(WM_MESSAGE * pMsg)
  52. {
  53.     WM_HWIN hWin = pMsg->hWin;
  54.     //
  55.     //FRAMEWIN
  56.     //
  57.     FRAMEWIN_SetFont(hWin,&GUI_Font24B_ASCII);
  58.     FRAMEWIN_SetTextAlign(hWin,GUI_TA_VCENTER|GUI_TA_CENTER);
  59.     FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0);
  60.     FRAMEWIN_AddMaxButton(hWin, FRAMEWIN_BUTTON_RIGHT, 1);
  61.     FRAMEWIN_AddMinButton(hWin, FRAMEWIN_BUTTON_RIGHT, 2);
  62.     FRAMEWIN_SetTitleHeight(hWin,30);

  63. }

  64. /*********************************************************************
  65. *
  66. *       Dialog callback routine
  67. */
  68. static void _cbCallback(WM_MESSAGE * pMsg)
  69. {
  70.     int NCode, Id;
  71.     WM_HWIN hWin = pMsg->hWin;
  72.     switch (pMsg->MsgId) (1)
  73.     {
  74.         case WM_PAINT:(2)
  75.             PaintDialog(pMsg);
  76.             break;
  77.         case WM_INIT_DIALOG:(3)
  78.             InitDialog(pMsg);
  79.             break;
  80.         case WM_KEY:  (4)
  81.             switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key)
  82.             {
  83.                 case GUI_KEY_ESCAPE:
  84.                     GUI_EndDialog(hWin, 1);
  85.                     break;
  86.                 case GUI_KEY_ENTER:
  87.                     GUI_EndDialog(hWin, 0);
  88.                     break;
  89.             }
  90.             break;
  91.         case WM_NOTIFY_PARENT:(5)
  92.             Id = WM_GetId(pMsg->hWinSrc);
  93.             NCode = pMsg->Data.v;        
  94.             switch (Id)
  95.             {
  96.                 case GUI_ID_OK:
  97.                     if(NCode==WM_NOTIFICATION_RELEASED)
  98.                         GUI_EndDialog(hWin, 0);
  99.                     break;
  100.                 case GUI_ID_CANCEL:
  101.                     if(NCode==WM_NOTIFICATION_RELEASED)
  102.                         GUI_EndDialog(hWin, 0);
  103.                     break;
  104.                 case GUI_ID_BUTTON0:
  105.                     switch(NCode)
  106.                     {
  107.                         case WM_NOTIFICATION_CLICKED:
  108.                             OnButtonClicked(pMsg);
  109.                             break;
  110.                         case WM_NOTIFICATION_RELEASED:
  111.                             OnButtonReleased(pMsg);
  112.                             break;
  113.                         case WM_NOTIFICATION_MOVED_OUT:
  114.                             OnButtonMovedOut(pMsg);
  115.                             break;
  116.                     }
  117.                     break;
  118.                 case GUI_ID_BUTTON1:
  119.                     switch(NCode)
  120.                     {
  121.                         case WM_NOTIFICATION_CLICKED:
  122.                             OnButtonClicked(pMsg);
  123.                             break;
  124.                         case WM_NOTIFICATION_RELEASED:
  125.                             OnButtonReleased(pMsg);
  126.                             break;
  127.                         case WM_NOTIFICATION_MOVED_OUT:
  128.                             OnButtonMovedOut(pMsg);
  129.                             break;
  130.                     }
  131.                     break;

  132.             }
  133.             break;
  134.         default:
  135.             WM_DefaultProc(pMsg);
  136.     }
  137. }

  138. /*********************************************************************
  139. *
  140. *       MainTask
  141. *
  142. **********************************************************************
  143. */
  144. void MainTask(void)
  145. {
  146.     GUI_Init();
  147.     WM_SetDesktopColor(GUI_WHITE);      /* Automacally update desktop window */
  148.     WM_SetCreateFlags(WM_CF_MEMDEV);  /* Use memory devices on all windows to avoid flicker */
  149.     //PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
  150.     //FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);
  151.     //PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
  152.     //BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);
  153.     //CHECKBOX_SetDefaultSkin(CHECKBOX_SKIN_FLEX);
  154.     //DROPDOWN_SetDefaultSkin(DROPDOWN_SKIN_FLEX);
  155.     //SCROLLBAR_SetDefaultSkin(SCROLLBAR_SKIN_FLEX);
  156.     //SLIDER_SetDefaultSkin(SLIDER_SKIN_FLEX);
  157.     //HEADER_SetDefaultSkin(HEADER_SKIN_FLEX);
  158.     //RADIO_SetDefaultSkin(RADIO_SKIN_FLEX);
  159.     GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0);
  160. }
复制代码
这里咱们重点看对话框的回调函数_cbCallback中的内容:
1. 通过switch (pMsg->MsgId) 区分各种系统消息类型。
2. WM_PAINT:
    窗口变为无效 (部分或全部)并需要绘制时,WM将此消息发送到窗口。窗口收到WM_PAINT消息时,应重绘自身。将此消息发送到窗口前,WM确保它已被选定。该消息的Data.p指针指向在屏幕坐标中包含窗口的无效矩形的GUI_RECT结构。此类信息可用于优化着色功能。
3. WM_INIT_DIALOG:
       此消息在对话框创建后、显示前发送到窗口。对话框程序通常使用此消息初始化小工具,并执行影响对话框外观的其他任何初始化任务。
    上面程序中初始化了控件FrameWin,主要是设置了一些标题。
4. WM_KEY:
    按下某个键后发送此消息到当前包含焦点的窗体。第31章介绍键盘输入的时候就是用的这个消息。Data.p指针中含有指向WM_KEY_INFO结构的消息。WM_KEY_INFO的定义如下:
33.7.png
5. WM_NOTIFY_PARENT:
       告知父窗口,其子窗口中发生了某些改变。这些消息通常由小工具发送到其父窗口,让它们可以对事件作出反应。消息的Data.v值包含消息的通知代码。上面对话框上创建的两个按钮就是通过这个消息进行操作。
    这里我们就先介绍这几种消息,后面再介绍其余的系统消息类型。

baiyongbin2009 回答时间:2015-2-14 20:01:33
33.4 指针输入设备(PID)类型消息实例
    基于上面的例子,我们实现一下PID类型消息WM_MOUSEOVER,代码如下(可以直接复制到模拟器上面运行或者开发板上面):
  1. #include <stddef.h>
  2. #include "GUI.h"
  3. #include "DIALOG.h"

  4. #include "WM.h"
  5. #include "BUTTON.h"
  6. #include "CHECKBOX.h"
  7. #include "DROPDOWN.h"
  8. #include "EDIT.h"
  9. #include "FRAMEWIN.h"
  10. #include "LISTBOX.h"
  11. #include "MULTIEDIT.h"
  12. #include "RADIO.h"
  13. #include "SLIDER.h"
  14. #include "TEXT.h"
  15. #include "PROGBAR.h"
  16. #include "SCROLLBAR.h"
  17. #include "LISTVIEW.h"


  18. /*********************************************************************
  19. *
  20. *       static data
  21. *
  22. **********************************************************************
  23. */
  24. GUI_COLOR _acColor[3] = {GUI_BLUE,GUI_RED,GUI_YELLOW}; (1)
  25. static unsigned char ucBackColor; (2)


  26. /*********************************************************************
  27. *
  28. *       Dialog resource
  29. *
  30. * This table conatins the info required to create the dialog.
  31. * It has been created by ucGUIbuilder.
  32. */

  33. static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  34.     { FRAMEWIN_CreateIndirect,  "armfly",            0,                       0,  0,  800,480,FRAMEWIN_CF_MOVEABLE,0},
  35.     { BUTTON_CreateIndirect,    "BUTTON0",           GUI_ID_BUTTON0,          82, 122,162,37, 0,0},
  36.     { BUTTON_CreateIndirect,    "BUTTON1",           GUI_ID_BUTTON1,          357,123,152,35, 0,0}
  37. };

  38. /*****************************************************************
  39. **      FunctionName:void PaintDialog(WM_MESSAGE * pMsg)
  40. **      Function: to initialize the Dialog items
  41. **                                                      
  42. **      call this function in _cbCallback --> WM_PAINT
  43. *****************************************************************/

  44. void PaintDialog(WM_MESSAGE * pMsg)
  45. {
  46.     WM_HWIN hWin = pMsg->hWin;
  47. GUI_SetBkColor(_acColor[ucBackColor]);(3)
  48. GUI_Clear();
  49. }

  50. /*****************************************************************
  51. **      FunctionName:void InitDialog(WM_MESSAGE * pMsg)
  52. **      Function: to initialize the Dialog items
  53. **                                                      
  54. **      call this function in _cbCallback --> WM_INIT_DIALOG
  55. *****************************************************************/

  56. void InitDialog(WM_MESSAGE * pMsg)
  57. {
  58.     WM_HWIN hWin = pMsg->hWin;
  59.     //
  60.     //FRAMEWIN
  61.     //
  62.     FRAMEWIN_SetFont(hWin,&GUI_Font24B_ASCII);(4)
  63.     FRAMEWIN_SetTextAlign(hWin,GUI_TA_VCENTER|GUI_TA_CENTER);
  64.     FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0);
  65.     FRAMEWIN_AddMaxButton(hWin, FRAMEWIN_BUTTON_RIGHT, 1);
  66.     FRAMEWIN_AddMinButton(hWin, FRAMEWIN_BUTTON_RIGHT, 2);
  67.     FRAMEWIN_SetTitleHeight(hWin,30);

  68. /* 默认颜色取*/
  69. ucBackColor = 0;(5)
  70. }

  71. /*********************************************************************
  72. *
  73. *       Dialog callback routine
  74. */
  75. static void _cbCallback(WM_MESSAGE * pMsg)
  76. {
  77.     int NCode, Id;
  78.     WM_HWIN hWin = pMsg->hWin;
  79.     switch (pMsg->MsgId)
  80.     {
  81.         case WM_MOUSEOVER:(6)
  82. ucBackColor++;
  83. if (ucBackColor == 3)
  84. {
  85. ucBackColor = 0;
  86. }
  87.             WM_InvalidateWindow(hWin);
  88.             break;
  89. case WM_PAINT:
  90.             PaintDialog(pMsg);
  91.             break;
  92.         case WM_INIT_DIALOG:
  93.             InitDialog(pMsg);
  94.             break;
  95.         case WM_KEY:
  96.             switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key)
  97.             {
  98.                 case GUI_KEY_ESCAPE:
  99.                     GUI_EndDialog(hWin, 1);
  100.                     break;
  101.                 case GUI_KEY_ENTER:
  102.                     GUI_EndDialog(hWin, 0);
  103.                     break;
  104.             }
  105.             break;
  106.         case WM_NOTIFY_PARENT:
  107.             Id = WM_GetId(pMsg->hWinSrc);
  108.             NCode = pMsg->Data.v;        
  109.             switch (Id)
  110.             {
  111.                 case GUI_ID_OK:
  112.                     if(NCode==WM_NOTIFICATION_RELEASED)
  113.                         GUI_EndDialog(hWin, 0);
  114.                     break;
  115.                 case GUI_ID_CANCEL:
  116.                     if(NCode==WM_NOTIFICATION_RELEASED)
  117.                         GUI_EndDialog(hWin, 0);
  118.                     break;
  119.                 case GUI_ID_BUTTON0:
  120.                     switch(NCode)
  121.                     {
  122.                         case WM_NOTIFICATION_CLICKED:

  123.                             break;
  124.                         case WM_NOTIFICATION_RELEASED:

  125.                             break;
  126.                         case WM_NOTIFICATION_MOVED_OUT:

  127.                             break;
  128.                     }
  129.                     break;
  130.                 case GUI_ID_BUTTON1:
  131.                     switch(NCode)
  132.                     {
  133.                         case WM_NOTIFICATION_CLICKED:

  134.                             break;
  135.                         case WM_NOTIFICATION_RELEASED:

  136.                             break;
  137.                         case WM_NOTIFICATION_MOVED_OUT:

  138.                             break;
  139.                     }
  140.                     break;

  141.             }
  142.             break;
  143.         default:
  144.             WM_DefaultProc(pMsg);
  145.     }
  146. }


  147. /*********************************************************************
  148. *
  149. *       MainTask
  150. *
  151. **********************************************************************
  152. */
  153. void MainTask(void)
  154. {
  155.     GUI_Init();
  156.     WM_SetDesktopColor(GUI_BLUE);      /* Automacally update desktop window */
  157.     WM_SetCreateFlags(WM_CF_MEMDEV);  /* Use memory devices on all windows to avoid flicker */
  158. PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
  159. FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);
  160. PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
  161. BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);
  162. CHECKBOX_SetDefaultSkin(CHECKBOX_SKIN_FLEX);
  163. DROPDOWN_SetDefaultSkin(DROPDOWN_SKIN_FLEX);
  164. SCROLLBAR_SetDefaultSkin(SCROLLBAR_SKIN_FLEX);
  165. SLIDER_SetDefaultSkin(SLIDER_SKIN_FLEX);
  166. HEADER_SetDefaultSkin(HEADER_SKIN_FLEX);
  167. RADIO_SetDefaultSkin(RADIO_SKIN_FLEX);
  168.     GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0);
  169. }
复制代码
1. 定义一个数组,里面有三种颜色。
2. 定义一个变量,用于上面三种颜色的切换。
3. 在WM_PAINT消息中实现重绘,主要用于实现对话框用户区的颜色重绘。
4. 在WM_INIT_DIALOG消息中初始化对话框中的控件,这里初始化了FrameWin。
5. 初始化背景颜色的初始值_acColor[ucBackColor]。
6. 这里加入了消息WM_MOUSEOVER,这个消息的功能是指针输入设备接触到窗口轮廓时发送到窗口。仅在启用鼠标支持时发送。在这个消息里面切换对话框的背景色变量,然后调用函数WM_InvalidateWindow,一旦调用这个函数就会去执行此对话框的WM_PAINT消息。
这个例子的实际显示效果如下:
33.8.png
PID类型的其它消息,大家可以在模拟器上面做一个简单的测试,后面用到的时候还会跟大家详细讲解。

baiyongbin2009 回答时间:2015-2-14 20:03:38
33.5 通知代码类型消息实例
    这里我们还用上面创建的例子,只不过这次我们主要通过对话框上的按钮来实现这种消息类型。代码如下(可以直接复制到模拟器上面运行或者开发板上面):
  1. #include <stddef.h>
  2. #include "GUI.h"
  3. #include "DIALOG.h"

  4. #include "WM.h"
  5. #include "BUTTON.h"
  6. #include "CHECKBOX.h"
  7. #include "DROPDOWN.h"
  8. #include "EDIT.h"
  9. #include "FRAMEWIN.h"
  10. #include "LISTBOX.h"
  11. #include "MULTIEDIT.h"
  12. #include "RADIO.h"
  13. #include "SLIDER.h"
  14. #include "TEXT.h"
  15. #include "PROGBAR.h"
  16. #include "SCROLLBAR.h"
  17. #include "LISTVIEW.h"


  18. /*********************************************************************
  19. *
  20. *       static data
  21. *
  22. **********************************************************************
  23. */
  24. GUI_COLOR _acColor[3] = {GUI_BLUE,GUI_RED,GUI_YELLOW};
  25. static  char ucBackColor;


  26. /*********************************************************************
  27. *
  28. *       Dialog resource
  29. *
  30. * This table conatins the info required to create the dialog.
  31. * It has been created by ucGUIbuilder.
  32. */

  33. static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  34.     { FRAMEWIN_CreateIndirect,  "armfly",            0,                       0,  0,  800,480,FRAMEWIN_CF_MOVEABLE,0},
  35.     { BUTTON_CreateIndirect,    "BUTTON0",           GUI_ID_BUTTON0,          82, 122,162,37, 0,0},
  36.     { BUTTON_CreateIndirect,    "BUTTON1",           GUI_ID_BUTTON1,          357,123,152,35, 0,0}
  37. };

  38. /*****************************************************************
  39. **      FunctionName:void PaintDialog(WM_MESSAGE * pMsg)
  40. **      Function: to initialize the Dialog items
  41. **                                                      
  42. **      call this function in _cbCallback --> WM_PAINT
  43. *****************************************************************/

  44. void PaintDialog(WM_MESSAGE * pMsg)
  45. {
  46.     WM_HWIN hWin = pMsg->hWin;
  47. GUI_SetBkColor(_acColor[ucBackColor]);
  48. GUI_Clear();
  49. }

  50. /*****************************************************************
  51. **      FunctionName:void InitDialog(WM_MESSAGE * pMsg)
  52. **      Function: to initialize the Dialog items
  53. **                                                      
  54. **      call this function in _cbCallback --> WM_INIT_DIALOG
  55. *****************************************************************/

  56. void InitDialog(WM_MESSAGE * pMsg)
  57. {
  58.     WM_HWIN hWin = pMsg->hWin;
  59.     //
  60.     //FRAMEWIN
  61.     //
  62.     FRAMEWIN_SetFont(hWin,&GUI_Font24B_ASCII);
  63.     FRAMEWIN_SetTextAlign(hWin,GUI_TA_VCENTER|GUI_TA_CENTER);
  64.     FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0);
  65.     FRAMEWIN_AddMaxButton(hWin, FRAMEWIN_BUTTON_RIGHT, 1);
  66.     FRAMEWIN_AddMinButton(hWin, FRAMEWIN_BUTTON_RIGHT, 2);
  67.     FRAMEWIN_SetTitleHeight(hWin,30);

  68. /* 默认颜色取*/
  69. ucBackColor = 0;
  70. }

  71. /*********************************************************************
  72. *
  73. *       Dialog callback routine
  74. */
  75. static void _cbCallback(WM_MESSAGE * pMsg)
  76. {
  77.     int NCode, Id;
  78.     WM_HWIN hWin = pMsg->hWin;
  79.     switch (pMsg->MsgId)
  80.     {
  81.         case WM_MOUSEOVER:
  82.             break;
  83. case WM_PAINT:
  84.             PaintDialog(pMsg);
  85.             break;
  86.         case WM_INIT_DIALOG:
  87.             InitDialog(pMsg);
  88.             break;
  89.         case WM_KEY:
  90.             switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key)
  91.             {
  92.                 case GUI_KEY_ESCAPE:
  93.                     GUI_EndDialog(hWin, 1);
  94.                     break;
  95.                 case GUI_KEY_ENTER:
  96.                     GUI_EndDialog(hWin, 0);
  97.                     break;
  98.             }
  99.             break;
  100.         case WM_NOTIFY_PARENT:
  101.             Id = WM_GetId(pMsg->hWinSrc);
  102.             NCode = pMsg->Data.v;        
  103.             switch (Id)
  104.             {
  105.                 case GUI_ID_OK:
  106.                     if(NCode==WM_NOTIFICATION_RELEASED)
  107.                         GUI_EndDialog(hWin, 0);
  108.                     break;
  109.                 case GUI_ID_CANCEL:
  110.                     if(NCode==WM_NOTIFICATION_RELEASED)
  111.                         GUI_EndDialog(hWin, 0);
  112.                     break;
  113.                 case GUI_ID_BUTTON0:
  114.                     switch(NCode)
  115.                     {
  116.                         case WM_NOTIFICATION_CLICKED:(1)
  117. ucBackColor++;
  118. if (ucBackColor == 3)
  119. {
  120. ucBackColor = 0;
  121. }
  122. WM_InvalidateWindow(hWin);
  123.                             break;
  124.                         case WM_NOTIFICATION_RELEASED:

  125.                             break;
  126.                         case WM_NOTIFICATION_MOVED_OUT:

  127.                             break;
  128.                     }
  129.                     break;
  130.                 case GUI_ID_BUTTON1:
  131.                     switch(NCode)
  132.                     {
  133.                         case WM_NOTIFICATION_CLICKED:(2)
  134. ucBackColor--;
  135. if (ucBackColor < 0)
  136. {
  137. ucBackColor = 2;
  138. }
  139. WM_InvalidateWindow(hWin);
  140.                             break;
  141.                         case WM_NOTIFICATION_RELEASED:

  142.                             break;
  143.                         case WM_NOTIFICATION_MOVED_OUT:

  144.                             break;
  145.                     }
  146.                     break;

  147.             }
  148.             break;
  149.         default:
  150.             WM_DefaultProc(pMsg);
  151.     }
  152. }


  153. /*********************************************************************
  154. *
  155. *       MainTask
  156. *
  157. **********************************************************************
  158. */
  159. void MainTask(void)
  160. {
  161.     GUI_Init();
  162.     WM_SetDesktopColor(GUI_BLUE);      /* Automacally update desktop window */
  163.     WM_SetCreateFlags(WM_CF_MEMDEV);  /* Use memory devices on all windows to avoid flicker */
  164. PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
  165. FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);
  166. PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
  167. BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);
  168. CHECKBOX_SetDefaultSkin(CHECKBOX_SKIN_FLEX);
  169. DROPDOWN_SetDefaultSkin(DROPDOWN_SKIN_FLEX);
  170. SCROLLBAR_SetDefaultSkin(SCROLLBAR_SKIN_FLEX);
  171. SLIDER_SetDefaultSkin(SLIDER_SKIN_FLEX);
  172. HEADER_SetDefaultSkin(HEADER_SKIN_FLEX);
  173. RADIO_SetDefaultSkin(RADIO_SKIN_FLEX);
  174.     GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0);
  175. }
复制代码
1. 这里主要是实现按钮的WM_NOTIFICATION_CLICKED消息。如果用户按下这个按钮,那么就切换背景颜色。
2. 同上,只不过这里用的是另一个按钮。
3. 实际显示效果和上面33.4小节的贴图是一样的。
33.6 总结
    本期教程就跟大家讲这么多,只给大家具了部分消息类型的通信实例,后面还会通过更多例子来强化大家对这方面知识的理解。

lkl0305 回答时间:2015-2-14 21:33:45
多谢分享!!!
超导式 回答时间:2015-2-14 21:48:48
感谢分享
MouseCat 回答时间:2015-2-15 09:03:13
好资料,收藏了哈

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版