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

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

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

' o7 J7 a* c, T
    本期教程开始讲解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
- P/ d) K" M+ f- [
用户定义消息类型:
33.5.png
6 [4 M! ]3 @- p
1 `& ?' `2 {4 y" ]. H
赞 收藏 评论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>
    5 |; U  R4 N; j+ V! M, g, q
  2. #include "GUI.h"! ]4 z' u) b$ v, `
  3. #include "DIALOG.h"7 W% \$ w9 j$ {' I

  4. ( }% c) U' M, z5 J; P
  5. #include "WM.h"
    , ?0 T) `3 r0 g: Q. u% D
  6. #include "BUTTON.h"* ?2 T) g7 C1 V
  7. #include "CHECKBOX.h"
    / g1 {# D+ K( h2 Q' ~2 M, C
  8. #include "DROPDOWN.h"9 Z# _, Z; V6 o  }0 \5 u
  9. #include "EDIT.h"
    # m5 t6 y6 F+ x: p9 [7 b' ^3 m2 f3 K
  10. #include "FRAMEWIN.h". \% W+ M4 @4 z7 ?8 r3 y  G
  11. #include "LISTBOX.h"! r7 e9 L3 g  w% @* x4 o* d' c
  12. #include "MULTIEDIT.h"  Q4 [6 m8 O* N' `2 u
  13. #include "RADIO.h"
    ; D  Q8 D  k% {. U) J
  14. #include "SLIDER.h"" R3 \2 e* W; g. d7 O4 Q( C% a# G
  15. #include "TEXT.h"
    / \4 a% e, g  g1 b
  16. #include "PROGBAR.h"9 ]( Z# |0 j% x6 Q
  17. #include "SCROLLBAR.h": |: l# o+ ~, j2 R% v7 {# i
  18. #include "LISTVIEW.h"( E% I. n  q9 B$ x0 l) V

  19. 2 s7 E% q8 w* f! N& N

  20. 9 ^: ]% m& S+ X
  21. //EventsFunctionList0 l, ?7 C' A1 C. d8 F! x
  22. void OnButtonClicked(WM_MESSAGE * pMsg);
    6 Z9 @3 g5 {$ f$ Q" B, y3 z
  23. void OnButtonReleased(WM_MESSAGE * pMsg);
    5 {) V- O: h9 I1 C8 n
  24. void OnButtonMovedOut(WM_MESSAGE * pMsg);
    3 Z6 H# k! O1 q, E: Y+ U3 F
  25. //EndofEventsFunctionList' C' I  m7 x4 E9 n

  26. ' N+ a7 H9 V" a" J& i
  27. /*********************************************************************
    . V; X& W6 T' t, H: U
  28. *
    & q9 ~4 p, f1 P0 J7 l
  29. *       Dialog resource
    2 d. F6 [( M, h9 G8 N% k& `- d
  30. *; F/ c) F, c3 \0 s5 K* D
  31. * This table conatins the info required to create the dialog.+ p& F+ a8 i' B9 A+ ~
  32. * It has been created by ucGUIbuilder.# M5 @7 F; d" ]2 b5 B' k- Z
  33. */! \: F* V7 Z8 e4 E
  34. " x, H9 G0 p; l$ `! H# u
  35. static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {: J3 h" C0 G0 r8 x% {: X
  36.     { FRAMEWIN_CreateIndirect,  "armfly",            0,                       0,  0,  800,480,FRAMEWIN_CF_MOVEABLE,0},
    2 N9 v2 J/ G- G$ m+ A
  37.     { BUTTON_CreateIndirect,    "BUTTON0",           GUI_ID_BUTTON0,          82, 122,162,37, 0,0},6 ~/ e2 Q1 L3 h) c( N  V  c! B& V
  38.     { BUTTON_CreateIndirect,    "BUTTON1",           GUI_ID_BUTTON1,          357,123,152,35, 0,0}( v  C* @( e) F- W! v# v' Z
  39. };
      z! M& }. {# X; S% O3 U! y
  40. & B0 g# g6 p$ {4 _

  41. / k2 C* F& k4 g2 @5 |

  42. ) U% k  n( T; J; z: C2 ]; k, _
  43. /*****************************************************************" O0 Q1 o% h- e3 F& A) |/ Z" P
  44. **      FunctionName:void PaintDialog(WM_MESSAGE * pMsg)# j2 W8 u7 l, z7 a$ h. O
  45. **      Function: to initialize the Dialog items( W0 I( o  S6 X/ G$ Z
  46. **                                                      6 N' y/ z7 P' I( K. Q
  47. **      call this function in _cbCallback --> WM_PAINT
    . N1 y" m# g/ ], u
  48. *****************************************************************/. j3 p# ^; X" c& d4 |6 e7 x. p/ C
  49. 9 u; _8 R+ r5 [$ |8 l/ ]
  50. void PaintDialog(WM_MESSAGE * pMsg)
    , E# v( E1 C) y+ O9 @2 |+ T
  51. {
    8 T4 n! Q* g. A0 I
  52.     WM_HWIN hWin = pMsg->hWin;) p  I& R) c) @
  53. - W2 c' L7 ~. U1 e6 q+ I" z- P
  54. }" s& [) f1 z7 K, {
  55. , D/ G; y  c8 u9 @: D. o3 u; E
  56. /*****************************************************************+ Z  D4 j! N/ }( {9 ?
  57. **      FunctionName:void InitDialog(WM_MESSAGE * pMsg)) ~7 D9 |' P  J, c2 g2 A
  58. **      Function: to initialize the Dialog items
    : o/ i! [& h9 ^
  59. **                                                      
    ' ~( S. }; H2 ^; C5 J  v
  60. **      call this function in _cbCallback --> WM_INIT_DIALOG
    : F7 u& j) ]; b  x+ m
  61. *****************************************************************/
    1 i% d4 i8 I2 d0 g

  62. ( t2 f8 z" b! i; L, d: V# X% t
  63. void InitDialog(WM_MESSAGE * pMsg)
    8 ]) v- @* ]1 r: x
  64. {# j5 [6 W2 m" O& F7 z! M- [
  65.     WM_HWIN hWin = pMsg->hWin;
    , h! i: I! c4 q7 |/ D; D& ]
  66.     //% E' E  [# X  K  O" H0 l$ P+ _
  67.     //FRAMEWIN' R% z) K" C3 ?+ y$ g, m. `
  68.     //
    7 V! L. I1 r$ r0 l+ P
  69.     FRAMEWIN_SetFont(hWin,&GUI_Font24B_ASCII);) ~/ D4 N+ g2 Q; c
  70.     FRAMEWIN_SetTextAlign(hWin,GUI_TA_VCENTER|GUI_TA_CENTER);
    - |" P+ |/ i7 S) e
  71.     FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0);! o2 W0 W' J- S" |
  72.     FRAMEWIN_AddMaxButton(hWin, FRAMEWIN_BUTTON_RIGHT, 1);* Q6 e# a9 F' y/ X3 m. M7 U! I( d
  73.     FRAMEWIN_AddMinButton(hWin, FRAMEWIN_BUTTON_RIGHT, 2);3 Y" \. G( P) s
  74.     FRAMEWIN_SetTitleHeight(hWin,30);; Z! k" t' U; h6 @6 l1 t$ B7 ?

  75. ! i* E' N9 L9 d$ n3 Y9 T* \
  76. }5 b- _! X1 U* e, R( M# o) S

  77. 1 `" f6 {  u' |; w% D, r  T
  78. /*********************************************************************
    # u  j% `2 k6 o. Q
  79. *
    % s4 R7 A' V8 a* ^; M- |' |
  80. *       Dialog callback routine/ p! N) x4 ?, i* W+ M/ a
  81. */
    ( Y. Z* J- H5 E, d& X5 `
  82. static void _cbCallback(WM_MESSAGE * pMsg) 7 w/ Y9 r' p! ?' @& z/ c5 r
  83. {
    6 u0 o/ _6 e; |& x/ x4 V" J: _
  84.     int NCode, Id;$ O8 z) w% o5 O" F. I
  85.     WM_HWIN hWin = pMsg->hWin;5 F4 G1 \  b4 d2 B
  86.     switch (pMsg->MsgId) (1): g* I# J; ]# H( J
  87.     {. Q/ Y+ z# t7 y/ @# i) t8 ~
  88.         case WM_PAINT:(2)+ }0 E' x4 E3 U! A; d2 ]
  89.             PaintDialog(pMsg);
    ! p! M3 I2 C3 ~7 I
  90.             break;
    ' U3 X' f% j, \, z* v3 v  i
  91.         case WM_INIT_DIALOG:(3)
    ) z2 F: k6 `1 d4 C
  92.             InitDialog(pMsg);
    7 P* h) ?- u1 ]3 K2 g# K: }5 Q
  93.             break;; _- d# ~# F3 f1 L( f5 p; s
  94.         case WM_KEY:  (4)
    % t& F" c  e6 P4 _, J( D/ g
  95.             switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key) % Q' k! @# K! o2 C; Q' P
  96.             {
    2 Y% K  K9 E( n# ?1 K
  97.                 case GUI_KEY_ESCAPE:! I- l8 O+ X, [# H6 y7 [0 {
  98.                     GUI_EndDialog(hWin, 1);
    2 I6 p: y' E& t" W4 y  z$ H9 `
  99.                     break;
      Q6 u. w% V5 z2 O
  100.                 case GUI_KEY_ENTER:0 s" a. P3 L5 s* ]8 ]+ \
  101.                     GUI_EndDialog(hWin, 0);% \6 \7 `6 A) T0 @$ T2 ?
  102.                     break;1 c) S5 j' ^: i4 Q- N; R8 C' T
  103.             }
    % k' Y" F4 k, d
  104.             break;& J: K4 n( q; s& x0 `: t
  105.         case WM_NOTIFY_PARENT:(5)
    5 _+ Q! C/ W: S2 ?( z5 `9 f
  106.             Id = WM_GetId(pMsg->hWinSrc); 8 g: q0 e) w( U: f
  107.             NCode = pMsg->Data.v;        # b! [+ U# \2 x" x" Z) A
  108.             switch (Id)
    ' n1 b+ z/ J% s2 M7 n5 \
  109.             {
    - e% g  t: m/ i2 P
  110.                 case GUI_ID_OK:
    2 I" V2 s* B, d7 B( b3 _9 c/ @
  111.                     if(NCode==WM_NOTIFICATION_RELEASED)8 R$ B& S6 n$ u4 U8 q$ x6 n
  112.                         GUI_EndDialog(hWin, 0);
    5 r, R6 w3 j! A( ]1 n
  113.                     break;
    % U1 x% ^: n1 Z$ i% z: Q! u
  114.                 case GUI_ID_CANCEL:
    9 D; w7 b! r( w
  115.                     if(NCode==WM_NOTIFICATION_RELEASED)
    3 }( N. Z# t" u4 q! h
  116.                         GUI_EndDialog(hWin, 0);8 X3 x, l- q* k. B. g( v/ v( J- k+ o3 z
  117.                     break;% ~; y( G( }( H, Z" p
  118.                 case GUI_ID_BUTTON0:; v* ?$ W6 [1 C* j1 K
  119.                     switch(NCode)
    ) V1 P  R7 l. s; z# n
  120.                     {' Q9 E" B! q, _
  121.                         case WM_NOTIFICATION_CLICKED:
    ! `* \# k$ e- H, D: W9 i7 y* o6 q. s
  122.                             OnButtonClicked(pMsg);" m3 B+ I+ |( i- E: Q
  123.                             break;8 p3 z& p6 v' e" V$ c; V! N
  124.                         case WM_NOTIFICATION_RELEASED:5 K/ B" H1 r8 ?7 u5 V4 i* @
  125.                             OnButtonReleased(pMsg);% L% ~# J) t4 |# l; @1 _
  126.                             break;
    . @+ P! y1 B5 U, Y  \  c
  127.                         case WM_NOTIFICATION_MOVED_OUT:
    ' E; D6 q0 |0 h1 S) e
  128.                             OnButtonMovedOut(pMsg);8 ]# ]0 x2 e" u
  129.                             break;6 }. \1 }9 o1 e; A* j( c* J; m
  130.                     }
    : u& [4 a$ L3 ]" \9 S4 C. F
  131.                     break;+ [! ]  G- _! p% i& \3 {; ^
  132.                 case GUI_ID_BUTTON1:) T' v2 {/ `8 z/ Z1 J  J' r/ N  a
  133.                     switch(NCode)5 p# w" w) m3 @' @9 e( X
  134.                     {$ l" ~, _4 c' }% f3 i! a2 c9 P
  135.                         case WM_NOTIFICATION_CLICKED:) }! n# }! q3 j3 m
  136.                             OnButtonClicked(pMsg);. D" U; o  A5 M5 U3 }6 K+ Q9 m
  137.                             break;+ N+ s" v' r" h$ x
  138.                         case WM_NOTIFICATION_RELEASED:
    $ G" K+ z. m7 H! ]! t: }
  139.                             OnButtonReleased(pMsg);* F0 f0 |& G9 f8 w# r% c! c) Z
  140.                             break;
    ' ?7 {, g3 J8 c+ |. d: R5 k
  141.                         case WM_NOTIFICATION_MOVED_OUT:& R# |/ W3 F. u4 q  A7 N1 v. H" W# n
  142.                             OnButtonMovedOut(pMsg);
    $ V9 |8 l$ Y5 y& A' X" o/ z
  143.                             break;9 @( ~' H" c3 g" I9 L2 L# g" v
  144.                     }) v8 M1 s+ n- I8 z" R, s
  145.                     break;6 s+ l6 _+ R0 S7 d
  146. ) j( S0 W  s- K% z# j
  147.             }
    % c% ~# e! F, w/ |5 U
  148.             break;
    1 @. e. K$ H" w" K4 ^( E( A( o. C
  149.         default:) y$ G  w  x1 c: r  h+ M7 f
  150.             WM_DefaultProc(pMsg);
    0 T% u3 E' I" Q; z* ^. j9 c
  151.     }2 N8 T: j  q0 I- u1 F* m+ k
  152. }
    7 C  T% m% L& ~

  153. 4 f1 P8 x( H4 W
  154. /*********************************************************************& m7 @6 d0 E3 f$ L7 M
  155. *
    2 L' U$ Q0 n7 ^2 p6 E
  156. *       MainTask
    6 z/ t9 s7 y4 y/ p4 O" D& d
  157. *
    + m) v. C, S7 v1 g! S
  158. **********************************************************************4 e( n9 n8 ]0 U4 m' Y- {' [
  159. */3 {- D8 P6 M, }" V# D0 D3 L+ v9 S
  160. void MainTask(void)
    1 W6 k1 u% {! `1 f
  161. { 1 L* C3 N5 S) s7 h
  162.     GUI_Init();
    ) p* L, Q& T! G1 k
  163.     WM_SetDesktopColor(GUI_WHITE);      /* Automacally update desktop window */0 q6 h7 x9 T5 C
  164.     WM_SetCreateFlags(WM_CF_MEMDEV);  /* Use memory devices on all windows to avoid flicker */2 h. }% G: A* S9 z" d
  165.     //PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);  q! P' X1 Q, }, j! a2 s
  166.     //FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);
    & U) p4 Q9 f0 h; c
  167.     //PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
    $ p9 r2 L; i0 }0 C
  168.     //BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);5 L/ j% R, z) r0 l
  169.     //CHECKBOX_SetDefaultSkin(CHECKBOX_SKIN_FLEX);
    & V; l5 V( S" G
  170.     //DROPDOWN_SetDefaultSkin(DROPDOWN_SKIN_FLEX);
    ) `; T$ y9 l' p5 H& d* L
  171.     //SCROLLBAR_SetDefaultSkin(SCROLLBAR_SKIN_FLEX);
    3 ]% l1 W% j8 C# U' ?! \
  172.     //SLIDER_SetDefaultSkin(SLIDER_SKIN_FLEX);# u5 x" @3 W& A$ }  i1 G' C
  173.     //HEADER_SetDefaultSkin(HEADER_SKIN_FLEX);
    , ^0 o9 b+ c& ]; m3 ~6 W6 N8 j
  174.     //RADIO_SetDefaultSkin(RADIO_SKIN_FLEX);2 f/ Z& g: \% E; T" y8 [
  175.     GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0);
    3 `  |) b3 _: H# a
  176. }
复制代码
这里咱们重点看对话框的回调函数_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值包含消息的通知代码。上面对话框上创建的两个按钮就是通过这个消息进行操作。
    这里我们就先介绍这几种消息,后面再介绍其余的系统消息类型。
2 T5 B# X3 n$ [$ z& _% T& i/ b
baiyongbin2009 回答时间:2015-2-14 20:01:33
33.4 指针输入设备(PID)类型消息实例
    基于上面的例子,我们实现一下PID类型消息WM_MOUSEOVER,代码如下(可以直接复制到模拟器上面运行或者开发板上面):
  1. #include <stddef.h>7 M! {8 c: b1 T. o9 t
  2. #include "GUI.h"6 z" n9 C$ S; K8 @4 Z, m
  3. #include "DIALOG.h"
    . T  a. P# o$ w- g$ Q8 M2 s5 Y2 R; Q
  4. 7 G. r0 h7 u/ ~2 Z
  5. #include "WM.h"
    1 A% l+ o( a5 S. Z
  6. #include "BUTTON.h"
    5 O& @7 ^" b4 u) |
  7. #include "CHECKBOX.h"7 }2 G0 p) V" _. {1 u
  8. #include "DROPDOWN.h"4 q# G9 i9 V  q5 l' @' }$ ^, C4 P
  9. #include "EDIT.h"
    # b$ j9 n  L. R" ]4 z
  10. #include "FRAMEWIN.h"" K5 Y1 b$ e  X/ G" q
  11. #include "LISTBOX.h"
    7 k( [8 S! M: x  x# f' ~( M
  12. #include "MULTIEDIT.h"& V, G! V# n. ?4 ]2 l' M
  13. #include "RADIO.h"7 Z# s7 i3 V+ y9 M/ v1 E, `
  14. #include "SLIDER.h"7 h. d2 O* r( n, q; ~+ M0 T
  15. #include "TEXT.h"6 a, \4 t: H  j# ^
  16. #include "PROGBAR.h"
    3 U- A$ b" O: i2 J, p- S
  17. #include "SCROLLBAR.h". V' i) e; A3 K5 ~7 K' ^, ?
  18. #include "LISTVIEW.h"
    2 N& w& Y0 b4 `( j/ D) ~
  19. 2 a1 Y3 l0 A- s1 T5 p& F

  20. , W& R) t# \4 V4 _9 s4 B0 c1 s
  21. /*********************************************************************' s: j  t/ N* t7 W! X) H
  22. *. S1 y2 ~% M" c' V  q4 B- P- \5 g
  23. *       static data
    + c& D$ K) s% ]  W: ?$ T
  24. *) _) Q* Z$ B9 e! P6 d
  25. **********************************************************************
    $ @8 D0 N7 D, X
  26. */- S4 C" P! q5 {1 B4 K9 _3 y
  27. GUI_COLOR _acColor[3] = {GUI_BLUE,GUI_RED,GUI_YELLOW}; (1)7 y5 ]: X$ @, z- _
  28. static unsigned char ucBackColor; (2)! Z) e7 ^6 w* P, \6 e

  29. 0 H1 y" j: ^% n8 `9 v! M
  30. 2 n4 }: A' E, e) {
  31. /*********************************************************************
    % C  }  I9 p* H* C" X! ~
  32. *
    / f& K' g. b' \: Z! T3 Z6 ]
  33. *       Dialog resource
      y/ q; U% P7 g
  34. *& A: Q6 ], }! D0 U. p
  35. * This table conatins the info required to create the dialog.
    1 y  d$ b( m1 Q7 w% j! b
  36. * It has been created by ucGUIbuilder.
    " {7 i- ^! ]1 ~; Z
  37. */8 y. W1 a7 U3 \; J0 R) i  x

  38. : z1 Q, |' ?: k, h3 F
  39. static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
    ! x6 b2 K* M( i) {, k
  40.     { FRAMEWIN_CreateIndirect,  "armfly",            0,                       0,  0,  800,480,FRAMEWIN_CF_MOVEABLE,0},
    8 r! k+ t0 k" G0 T5 T8 x
  41.     { BUTTON_CreateIndirect,    "BUTTON0",           GUI_ID_BUTTON0,          82, 122,162,37, 0,0},
    0 `9 _0 w& K: n# s& V; N) f' Q
  42.     { BUTTON_CreateIndirect,    "BUTTON1",           GUI_ID_BUTTON1,          357,123,152,35, 0,0}' c0 |3 r8 n( d
  43. };) T% p: \6 r! `! \

  44. " d: s+ U. D- I9 p' Z6 ^5 c
  45. /*****************************************************************
    : {) [5 W! `. v+ s
  46. **      FunctionName:void PaintDialog(WM_MESSAGE * pMsg)
    * X& ^6 s9 H  P8 h
  47. **      Function: to initialize the Dialog items! c/ `- `3 {: z
  48. **                                                      
    4 e6 w3 i# ]$ P# B
  49. **      call this function in _cbCallback --> WM_PAINT! `6 |  p3 _) k# r- J' T+ e
  50. *****************************************************************/
    0 y6 |( G1 D: ]  K  S/ U
  51. 2 C3 u7 T5 d) j: {, M2 ~6 h" N
  52. void PaintDialog(WM_MESSAGE * pMsg)
    3 `6 y  e: V2 f7 _5 y! F
  53. {
    5 `$ i1 o- Z, a) h2 A! |
  54.     WM_HWIN hWin = pMsg->hWin;& y& e+ N, Z- m! \4 F3 t" i
  55. GUI_SetBkColor(_acColor[ucBackColor]);(3): [" [) S) |# j7 o$ l) S/ G' W
  56. GUI_Clear();
    9 E1 E" l* o! Q
  57. }. J5 r" l1 R- v% B6 v

  58. " D; g4 U6 C* s
  59. /*****************************************************************
    4 x, h$ B3 B* T5 b, F) y
  60. **      FunctionName:void InitDialog(WM_MESSAGE * pMsg): B* ~- v0 |, U
  61. **      Function: to initialize the Dialog items& P* d2 u' n* o% i( n* b5 [" {
  62. **                                                      
    6 w: _) P1 y3 R
  63. **      call this function in _cbCallback --> WM_INIT_DIALOG( j: Y+ o" ~4 u4 d: l
  64. *****************************************************************/
    ) |% m+ i/ x- r8 G1 J; ~
  65. 5 X# V: s" O; Q8 p- Q) n2 b
  66. void InitDialog(WM_MESSAGE * pMsg)# J" ?' F6 u3 g7 N+ p# A
  67. {) W1 X" h  z) X' r' K& v) v  E
  68.     WM_HWIN hWin = pMsg->hWin;
    8 E' C( |( f7 \& M) l
  69.     //8 b3 l0 m# Z/ v- A" Q% P1 Z( G: z
  70.     //FRAMEWIN
    8 {9 n+ c& H5 N# p; X; s' _" z6 @5 U
  71.     //
    + y- o1 E, F7 t9 [; _, N
  72.     FRAMEWIN_SetFont(hWin,&GUI_Font24B_ASCII);(4), J! A( S- O& P$ n$ S
  73.     FRAMEWIN_SetTextAlign(hWin,GUI_TA_VCENTER|GUI_TA_CENTER);
    % k7 m/ N; L2 |. O, p. q: k
  74.     FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0);" d% A7 t4 J* ?2 B" J- E
  75.     FRAMEWIN_AddMaxButton(hWin, FRAMEWIN_BUTTON_RIGHT, 1);! L( t7 g. Y+ S- P7 P" F# P: w2 K
  76.     FRAMEWIN_AddMinButton(hWin, FRAMEWIN_BUTTON_RIGHT, 2);  w  c& J/ f+ S' B; d
  77.     FRAMEWIN_SetTitleHeight(hWin,30);. @/ q4 ^, t3 h1 h5 a

  78. 7 m. R3 w  Z5 y7 {# ]8 |3 e8 u- g, T+ A
  79. /* 默认颜色取*/
    1 }1 _4 y- k' P! {) u
  80. ucBackColor = 0;(5)
      K! }. }4 c3 d6 J0 a
  81. }( z8 Y. Q2 }4 w1 P

  82. 0 R3 a0 J1 v7 c; j+ p
  83. /*********************************************************************
    . [& E5 M! f: f/ L  P9 g& u
  84. *; b# B$ J! L" F" k/ {) U
  85. *       Dialog callback routine
    3 q: v7 j* s) W) k* o
  86. */
    & d. z+ w! F) |; K1 A( k* f
  87. static void _cbCallback(WM_MESSAGE * pMsg) ( j& k0 O' V$ `0 ?4 H4 J
  88. {
    3 j) {1 ~5 S$ Z
  89.     int NCode, Id;& i4 v5 X- |. _$ @% g& s6 d$ w8 Y
  90.     WM_HWIN hWin = pMsg->hWin;$ }2 A  Y- c' L* L9 L
  91.     switch (pMsg->MsgId) " U+ i8 \+ l4 A$ o" W' z8 w
  92.     {, i2 b! Z# \! p$ ?. ?2 ?5 `* W% d# l6 S
  93.         case WM_MOUSEOVER:(6)
    3 z0 L6 ~0 t3 [# e- z
  94. ucBackColor++;0 W( \. k7 j) A7 @8 H9 k- r2 T
  95. if (ucBackColor == 3)
    2 D& a8 W% k5 Z1 L+ m9 h7 |% v/ A" W. |0 `
  96. {4 k9 C0 N- q8 {6 n
  97. ucBackColor = 0;  L: M6 r3 h7 Q, n, j8 }2 _
  98. }
    . L  t$ m3 I1 v
  99.             WM_InvalidateWindow(hWin);/ c! H- c' B3 S6 A2 C
  100.             break;
    1 ?% o; G+ ]. |; M
  101. case WM_PAINT:( G* R/ b, u! a+ d: h, W0 O; p5 O
  102.             PaintDialog(pMsg);- l8 I% y5 G4 h( Q1 a$ Z
  103.             break;
    : a% [9 L0 z) I1 u7 Z0 b8 r1 Z0 ?
  104.         case WM_INIT_DIALOG:
    ; ?7 K0 m2 h3 Y/ G
  105.             InitDialog(pMsg);5 f- h1 @% y; b; N& ^
  106.             break;! C. e; I( m! F/ S
  107.         case WM_KEY:
    - N3 B1 ]3 b/ s/ E- P- o
  108.             switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key)
    + v1 d: ^  L/ J7 B5 m/ N! ~+ F% \
  109.             {
    0 d+ s/ G5 D+ E* b9 c8 M
  110.                 case GUI_KEY_ESCAPE:
    : W9 e' T$ s# v6 |/ q7 k
  111.                     GUI_EndDialog(hWin, 1);6 d! m( O- r: ^- g2 E1 @
  112.                     break;' m1 G& n# C, s: A
  113.                 case GUI_KEY_ENTER:2 \3 R3 V. D" f. J( P3 _- f# }
  114.                     GUI_EndDialog(hWin, 0);5 L. H' V" Z. o1 D, g
  115.                     break;
    8 v: a4 \) a) c  ~3 \
  116.             }
    8 T% \( E7 f, H. x8 l- X
  117.             break;
    ) o6 D* J3 W8 E( T7 k( z- y
  118.         case WM_NOTIFY_PARENT:, M; n% j% ]8 l9 w
  119.             Id = WM_GetId(pMsg->hWinSrc); ; N9 Z4 ^( G! J1 T4 \9 U( d
  120.             NCode = pMsg->Data.v;        
    ' k% S# w* W8 q/ l  }2 T
  121.             switch (Id)
    6 c" N5 d" k9 B- n' x1 B& I
  122.             {
    . b% u: A, s: A: L- Q' b* Q
  123.                 case GUI_ID_OK:" w2 [5 N! r: E3 b) h  D; k
  124.                     if(NCode==WM_NOTIFICATION_RELEASED)! {9 b* t0 r, @! A( a7 q5 k/ D
  125.                         GUI_EndDialog(hWin, 0);
    / a  ]( G3 P1 Y1 c
  126.                     break;
    % ]+ N3 {9 |! c
  127.                 case GUI_ID_CANCEL:' J9 @. o/ o- V5 d9 D! w* o- L- a
  128.                     if(NCode==WM_NOTIFICATION_RELEASED)
    - \# J8 X, ^+ A  F
  129.                         GUI_EndDialog(hWin, 0);
    & A" f9 y' q- p0 B/ c
  130.                     break;2 h+ F5 L; v( A% o
  131.                 case GUI_ID_BUTTON0:
    ; \; m1 y& G. Q
  132.                     switch(NCode)
    # t0 E& Z# a. t2 N+ f9 `2 g
  133.                     {
    5 q6 B4 r9 `  g. R* h
  134.                         case WM_NOTIFICATION_CLICKED:
    9 q, f* W3 M. _# R

  135. : X% [9 Y8 Y6 |' m; A: d
  136.                             break;" y/ F7 a* t2 X8 K) V+ l
  137.                         case WM_NOTIFICATION_RELEASED:
    + r* j5 o+ ^1 V" \
  138. % d" q5 z( ~, O, A6 r/ k# E: L
  139.                             break;
    , P+ |( |" n& I6 d
  140.                         case WM_NOTIFICATION_MOVED_OUT:
    ; @1 G+ r, C2 `

  141. 4 a7 _& [9 O0 ?  V* c2 x
  142.                             break;
    # s( [* g( E4 p+ D: C
  143.                     }
    1 d6 ~8 [4 t( Z/ ^7 ^
  144.                     break;8 g  S3 j8 }! D" @/ T% T+ ]
  145.                 case GUI_ID_BUTTON1:
    ) F& n1 K! B6 O7 d
  146.                     switch(NCode)
    * w, ~- g& Y) s) f
  147.                     {
    6 l' v) ]9 z( U2 s* U1 L, S; C" _7 c
  148.                         case WM_NOTIFICATION_CLICKED:
    ' ^. U' t6 K: q( [. S

  149. ! L+ Q, ?/ r, V2 c. P9 g' R! o
  150.                             break;
      k% q4 J2 ^5 R7 N4 p
  151.                         case WM_NOTIFICATION_RELEASED:
    & h  _3 ?, y1 r9 o* d' r
  152. ; Z. F4 U! N" |! {
  153.                             break;
    & ~' u/ F) y8 K6 F6 c
  154.                         case WM_NOTIFICATION_MOVED_OUT:; `# W4 P8 b- C: T

  155. 8 A! }5 v3 O6 t: q+ v
  156.                             break;5 H0 k% t& h' e" G& L6 t( F
  157.                     }
    - }; g- d/ E4 S+ a1 Y# U" u6 C
  158.                     break;/ W% P' [7 j2 t; F5 E: [
  159. ! }. l2 D* ^7 @: q1 O
  160.             }
    ' t9 G0 L# z* }& J2 T, G
  161.             break;: X) D1 w' O7 z5 W. s
  162.         default:
    4 |; d) c+ I, b- O; U5 p! ?# x
  163.             WM_DefaultProc(pMsg);
    : x5 d' |: D5 ]7 `+ X
  164.     }+ R. l: E& p- X  x3 E0 l! |& J( K
  165. }
    8 N1 ]9 [. b6 y0 @9 h# F# v

  166. / `2 G3 Q+ _1 A) A
  167. ) E8 I7 p" i: e8 L# m8 F
  168. /*********************************************************************% Y( D5 v( X: k! r1 D1 L- Z
  169. *
    9 r$ b  a) n' z% t" c
  170. *       MainTask. o( c# i5 j4 B/ K0 p' s5 ?& o
  171. *
    , d+ K3 O+ ~2 c, |+ d. k* q
  172. **********************************************************************
    0 A  y) B- @8 R; E! w0 H
  173. */: {4 S! X. ?3 c, |4 u0 D
  174. void MainTask(void) " Q$ K. F' o9 U. ~1 ^
  175. {
    3 i: Z( p# N5 }% R; a2 Z
  176.     GUI_Init();
    6 T; [# q5 ^# K# {( y7 a  }
  177.     WM_SetDesktopColor(GUI_BLUE);      /* Automacally update desktop window */
    ! K% V1 {* z& O. h
  178.     WM_SetCreateFlags(WM_CF_MEMDEV);  /* Use memory devices on all windows to avoid flicker */
      g2 L) I; s0 O9 Y# M* f* W
  179. PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
    : p( W2 P# `5 C7 w5 A
  180. FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);1 p% ]- E) o, k
  181. PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
    " d- I, H& Q% `9 A' b
  182. BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);" V+ `5 D4 ]5 ~$ T) Q' `6 }
  183. CHECKBOX_SetDefaultSkin(CHECKBOX_SKIN_FLEX);
    % J0 `/ f6 B: B; g  `
  184. DROPDOWN_SetDefaultSkin(DROPDOWN_SKIN_FLEX);
    ! n# F. A6 X: U9 m! I/ w; P
  185. SCROLLBAR_SetDefaultSkin(SCROLLBAR_SKIN_FLEX);
    % m0 S$ P$ W0 W. T9 k* k
  186. SLIDER_SetDefaultSkin(SLIDER_SKIN_FLEX);
    # @9 {: B/ X. ~: R5 z1 Y
  187. HEADER_SetDefaultSkin(HEADER_SKIN_FLEX);
    3 B) k" S* w2 l& A
  188. RADIO_SetDefaultSkin(RADIO_SKIN_FLEX);* z3 X1 K: a# W0 g* I' a
  189.     GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0);0 {& v- X, M$ S4 T! m6 A
  190. }
复制代码
1. 定义一个数组,里面有三种颜色。
2. 定义一个变量,用于上面三种颜色的切换。
3. 在WM_PAINT消息中实现重绘,主要用于实现对话框用户区的颜色重绘。
4. 在WM_INIT_DIALOG消息中初始化对话框中的控件,这里初始化了FrameWin。
5. 初始化背景颜色的初始值_acColor[ucBackColor]。
6. 这里加入了消息WM_MOUSEOVER,这个消息的功能是指针输入设备接触到窗口轮廓时发送到窗口。仅在启用鼠标支持时发送。在这个消息里面切换对话框的背景色变量,然后调用函数WM_InvalidateWindow,一旦调用这个函数就会去执行此对话框的WM_PAINT消息。
这个例子的实际显示效果如下:
33.8.png
PID类型的其它消息,大家可以在模拟器上面做一个简单的测试,后面用到的时候还会跟大家详细讲解。

* d9 `# Z7 A* ]2 R, F/ @9 Z4 a
baiyongbin2009 回答时间:2015-2-14 20:03:38
33.5 通知代码类型消息实例
    这里我们还用上面创建的例子,只不过这次我们主要通过对话框上的按钮来实现这种消息类型。代码如下(可以直接复制到模拟器上面运行或者开发板上面):
  1. #include <stddef.h>
    7 Z# B8 Z0 _, a
  2. #include "GUI.h"
    5 s/ y% k/ y. n2 G) V2 |8 F9 s
  3. #include "DIALOG.h"/ I" S! h) g, I1 u5 y5 \/ z+ t

  4. 1 b( R3 b6 w, K4 b: J+ i3 C
  5. #include "WM.h"
    / H  `. n4 [  s9 N4 |: d: Z- N
  6. #include "BUTTON.h"
    + ^) X9 |, p4 U, |. T. c
  7. #include "CHECKBOX.h"
    . m3 r& w: e9 |8 F. N6 w3 L' Z
  8. #include "DROPDOWN.h"
    % ^+ g% s3 b, T4 N/ y' C1 m
  9. #include "EDIT.h"6 Q) D( Q% r2 g+ {4 R$ @9 g  k
  10. #include "FRAMEWIN.h"
    : h7 e! x" q' A
  11. #include "LISTBOX.h"
    9 X8 n2 d+ S" G( h/ Q( C1 \+ R: X
  12. #include "MULTIEDIT.h"
    . Q4 Y6 G7 `. }% o, U# w' \
  13. #include "RADIO.h"
    # B* A" M' e# J% D6 P6 U! {+ R8 c
  14. #include "SLIDER.h"
      ^/ d4 v' \0 \& W
  15. #include "TEXT.h"
    4 E) }+ F6 e" \& u8 E
  16. #include "PROGBAR.h"
    " u4 O: S. ]: m
  17. #include "SCROLLBAR.h"& R9 U: g) |/ E7 ]) I
  18. #include "LISTVIEW.h"
    * M5 Z* }# ~  T6 x

  19. ! X, U. j$ D- O% z7 @8 Z1 k: D

  20. & l7 b6 A  I8 p5 @2 [" B8 d
  21. /*********************************************************************
    2 x  Z) W: @+ @$ S
  22. *
    9 ~9 o6 G! Q0 |2 L/ [5 p& x- g
  23. *       static data
    & s* E5 ^5 @$ z( @9 i) X
  24. *
    , a% W" ~8 I% t4 f
  25. **********************************************************************( D+ O, {% S+ ?, h" o1 o
  26. *// ]/ @% M% V8 Q" z( a4 C* s
  27. GUI_COLOR _acColor[3] = {GUI_BLUE,GUI_RED,GUI_YELLOW};
      t& |2 _5 r) ]( H, P
  28. static  char ucBackColor;
    ! ]4 q. w8 O3 O
  29. ; j& m' u! g  h8 S5 h8 r. Y& V

  30. & [6 ~* g* z, M8 U: f* X2 \0 `* G& S
  31. /*********************************************************************, Z3 W. c+ W9 [9 n# [' x  T
  32. *) R* A9 J1 Q& o# g1 Q
  33. *       Dialog resource
    - G% y$ I. b& ?; G
  34. *
    6 p* G1 T% V3 s: M
  35. * This table conatins the info required to create the dialog.
    : ^5 D8 w: k) @3 [5 b
  36. * It has been created by ucGUIbuilder./ U. J0 p9 D- \7 x$ u2 H4 }# X
  37. */8 }" W8 X! y1 J6 U7 O) [
  38. 5 b( u& s: F" ?& W' V2 H
  39. static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
    1 s: u$ `0 F8 \5 Y( e; \
  40.     { FRAMEWIN_CreateIndirect,  "armfly",            0,                       0,  0,  800,480,FRAMEWIN_CF_MOVEABLE,0},
    9 d( [/ E: M" r' @# A, k
  41.     { BUTTON_CreateIndirect,    "BUTTON0",           GUI_ID_BUTTON0,          82, 122,162,37, 0,0},8 [/ m' @: n. y8 p9 l
  42.     { BUTTON_CreateIndirect,    "BUTTON1",           GUI_ID_BUTTON1,          357,123,152,35, 0,0}
    6 C$ [# f/ O- T: h4 o0 I
  43. };" b) `' T# F" o: J+ m' N
  44. 6 ~% F3 F4 y! p
  45. /*****************************************************************
    1 X9 Q) P2 U' N5 r& Q  H
  46. **      FunctionName:void PaintDialog(WM_MESSAGE * pMsg)
    8 U3 k" Z5 A, G: Y7 x* G
  47. **      Function: to initialize the Dialog items
    ' u6 Y9 u: z/ E1 D* d
  48. **                                                      
    - I# q: r. S- s2 X" D
  49. **      call this function in _cbCallback --> WM_PAINT
    - {- s& D; d+ ?7 F* t8 f
  50. *****************************************************************/8 s$ G, e/ y. E0 M

  51. ' G* \, k$ E4 T; {( h/ c$ v: S
  52. void PaintDialog(WM_MESSAGE * pMsg)
    8 O3 w7 R6 B6 }( V. Z1 ^
  53. {" \) u! }, N' {- b- m9 P
  54.     WM_HWIN hWin = pMsg->hWin;3 S1 R. X" y1 v  I3 m, R, N
  55. GUI_SetBkColor(_acColor[ucBackColor]);
    9 K7 ?% |/ M/ C0 n
  56. GUI_Clear();
    3 t8 r" g' W; I# x& `/ W# n
  57. }3 Y. W& R0 h# a5 E$ J7 }
  58. 7 Y' a: y  U; |: T* \
  59. /*****************************************************************5 {) d) @. f; E( i- I
  60. **      FunctionName:void InitDialog(WM_MESSAGE * pMsg)
    1 E# X3 B$ C1 |# z* I
  61. **      Function: to initialize the Dialog items
    7 G2 G5 Z9 k3 x8 s4 X2 F9 d
  62. **                                                      
    : N0 [9 a' }) x( Q9 A
  63. **      call this function in _cbCallback --> WM_INIT_DIALOG$ B# f+ m& b7 u9 x
  64. *****************************************************************/
    2 ^% m6 M1 L& U; Z9 e# U' q# n
  65. 0 r; n* |( c# b3 Y! u6 U$ L$ y
  66. void InitDialog(WM_MESSAGE * pMsg)* {5 [6 N  K4 h* W  E
  67. {
    # d& ^; ]. R9 k5 ]( M
  68.     WM_HWIN hWin = pMsg->hWin;
    5 e: Y2 q6 ~) o9 t) ?: G
  69.     //. z3 y* `6 O! [( f
  70.     //FRAMEWIN
    2 M4 a3 I. m9 |  Q+ M: \% D' i
  71.     //
    ) D9 J' g$ Q: t' E% Z# v& m
  72.     FRAMEWIN_SetFont(hWin,&GUI_Font24B_ASCII);# D6 y. P9 P/ n
  73.     FRAMEWIN_SetTextAlign(hWin,GUI_TA_VCENTER|GUI_TA_CENTER);3 Q4 \! `0 @: G" n6 j- v
  74.     FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0);$ ^. ]0 t" f+ i" g
  75.     FRAMEWIN_AddMaxButton(hWin, FRAMEWIN_BUTTON_RIGHT, 1);4 z! K- S8 P& i+ y; s
  76.     FRAMEWIN_AddMinButton(hWin, FRAMEWIN_BUTTON_RIGHT, 2);+ X9 g% U. X& C2 R" L
  77.     FRAMEWIN_SetTitleHeight(hWin,30);
    - ~4 l, k5 `0 C5 p0 m

  78. . m, E/ Y  C" T  W2 Z! j0 Y
  79. /* 默认颜色取*/! z' K+ ?, M1 A" y  A' S: A. X8 W
  80. ucBackColor = 0;
    4 V4 L6 G* F5 w4 ~- B
  81. }
    ! r# R' R$ w+ w! T% P
  82. + _* p4 K4 T  i6 k* }3 a
  83. /*********************************************************************
    . G2 R; S3 T& ^) S
  84. *  T( P6 V, H6 [" j
  85. *       Dialog callback routine
    + x) r  b6 f9 p) c' f4 I
  86. */# i1 d, H6 T+ o$ N( F
  87. static void _cbCallback(WM_MESSAGE * pMsg) 0 q# T: @: f0 h5 F& j; f+ S
  88. {
    & M0 l) b% {8 b+ A/ r* ?
  89.     int NCode, Id;
    ! e4 X5 m8 {; z+ h9 D/ q2 A
  90.     WM_HWIN hWin = pMsg->hWin;$ S$ o; @; z8 F/ l+ O0 P
  91.     switch (pMsg->MsgId) . f# n8 V; D" l" @8 T* S
  92.     {
      F, U$ }. w8 o& K$ K, t
  93.         case WM_MOUSEOVER:
    1 M- H2 D+ t. t6 T3 _
  94.             break;. k% P7 n- q1 E5 J+ i6 O8 }
  95. case WM_PAINT:
    ' B7 h8 O) P4 Z3 k
  96.             PaintDialog(pMsg);0 k$ `! I; N4 ^3 P7 |4 C3 m/ q
  97.             break;
    9 g2 O; U" z- L! R. U0 r* Z5 r
  98.         case WM_INIT_DIALOG:
    7 R" c+ X. ^1 a7 O
  99.             InitDialog(pMsg);
    6 _( j! m1 B+ J  P1 M5 {% X/ l
  100.             break;) m  H" O* a- C2 @0 v( l0 O
  101.         case WM_KEY:
    6 e& C* |2 k! X. u1 `$ `
  102.             switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key) 4 c' P: g5 ]! j" U* ]2 }3 p
  103.             {0 B5 d$ ]& Y1 \; |% ?$ f9 T$ w
  104.                 case GUI_KEY_ESCAPE:
    7 p7 D% T+ R" ?4 `+ r# s5 F: Z
  105.                     GUI_EndDialog(hWin, 1);* O) y( ?+ r' A! \4 b
  106.                     break;
    8 z" o. H% n0 f0 {& [  M
  107.                 case GUI_KEY_ENTER:
    % w- v5 i* o' r* Z9 b5 [# F
  108.                     GUI_EndDialog(hWin, 0);
    $ K9 C/ u2 E. g9 ~0 k0 d, M
  109.                     break;
    ( f7 W' P4 u* b( m: t) b
  110.             }
    5 A7 c8 A: V$ A2 ^3 {0 Z
  111.             break;
    0 C% }! k  f- r  Y2 F# A0 K
  112.         case WM_NOTIFY_PARENT:
    5 f7 j0 T' Q  T3 L) J( W0 o
  113.             Id = WM_GetId(pMsg->hWinSrc); , |9 f8 A2 ^4 N, B
  114.             NCode = pMsg->Data.v;        
    - s/ q7 |* g/ g6 R6 K7 t4 c4 K2 e
  115.             switch (Id)
    % F& M- W5 f% c* {5 G
  116.             {
    1 g6 r; x* K4 b1 I1 W
  117.                 case GUI_ID_OK:
    5 Z( ~8 @; y) T, x/ I5 _
  118.                     if(NCode==WM_NOTIFICATION_RELEASED)
    7 {9 S0 X+ `8 \8 l1 u
  119.                         GUI_EndDialog(hWin, 0);
    ) B+ k! \7 d! }  F0 Y
  120.                     break;1 ~9 S( }# k* c# E0 j/ ?
  121.                 case GUI_ID_CANCEL:6 E9 S* {/ ^& P6 f
  122.                     if(NCode==WM_NOTIFICATION_RELEASED)
    4 _/ M/ H+ l# Y7 U
  123.                         GUI_EndDialog(hWin, 0);
    , T& G. E7 q9 Y
  124.                     break;( O$ z' o% v5 [4 z5 T' B2 I
  125.                 case GUI_ID_BUTTON0:) {+ ?7 }" S2 R+ P  k& }
  126.                     switch(NCode)2 B  j% L' t9 B" I# r* f7 {
  127.                     {% ~/ r/ z3 w6 l/ k5 U4 s
  128.                         case WM_NOTIFICATION_CLICKED:(1)
    # Q2 I! k! @* Y) V
  129. ucBackColor++;
    ( R3 ]* y- u" X% O
  130. if (ucBackColor == 3)
    ! ?; u& K1 y, Y
  131. {6 m9 |/ q. k- \" S9 e0 H& z% g: S/ Y
  132. ucBackColor = 0;
    ' K$ k) B4 R5 |
  133. }
    / R' ^/ c  ~+ }+ t" q
  134. WM_InvalidateWindow(hWin);
    7 P' H5 x1 u9 e- f4 p6 c% y% K
  135.                             break;! @. Z) k# D# Z
  136.                         case WM_NOTIFICATION_RELEASED:. x8 j/ j5 ^/ e) N: J$ B

  137. ! C( P* y$ l. e
  138.                             break;
    ) l6 N: j# Z: b% A; a5 Z
  139.                         case WM_NOTIFICATION_MOVED_OUT:$ p6 @6 v* }; T* N/ d

  140. / R7 t, \, m, |4 l: n3 o# c2 D8 n
  141.                             break;
    # G8 ?4 D: G, u, Y8 f5 ]* [
  142.                     }! H2 v- U# F( S, u
  143.                     break;
    ! B/ `( N5 u' v1 S
  144.                 case GUI_ID_BUTTON1:0 c6 \; a" r1 a! W: [% g4 t
  145.                     switch(NCode)) H/ G: P0 b' t: e) v& L* y
  146.                     {6 Z+ |9 v- t2 y/ Q( b5 Z
  147.                         case WM_NOTIFICATION_CLICKED:(2)4 Y0 F7 ?8 V9 J! v$ s& V+ J% C; U
  148. ucBackColor--;
    1 N3 U7 h& s. b# V& s
  149. if (ucBackColor < 0)) |; O" q( ?0 M. `$ y
  150. {5 {) z- S, r! q! ]8 l) h
  151. ucBackColor = 2;
    " s: U2 p0 f( m1 }: ~( m6 [+ I
  152. }
    2 a2 a  x) p4 T9 ?+ [6 e. R
  153. WM_InvalidateWindow(hWin);2 z7 T. A3 E5 }& n  q/ G  @
  154.                             break;. d2 O0 e0 o7 \
  155.                         case WM_NOTIFICATION_RELEASED:
    / v* j7 n8 w- y4 j8 b
  156. ; Z. G) O* y7 g; d
  157.                             break;# o5 I% M$ K0 \" h
  158.                         case WM_NOTIFICATION_MOVED_OUT:
    2 k3 X( Q* c( ]

  159. - f! t. o4 S. R  h
  160.                             break;4 c+ X3 h" z% ^4 F/ N
  161.                     }9 |/ D3 @& M5 u4 {6 v
  162.                     break;
    8 ^3 c; x& H2 O! r2 D& l' L7 }
  163. 8 O/ G& ?# S# H
  164.             }
    ! p& ]1 r6 y+ H
  165.             break;
    - ]; ?( |, X# T% s- t: y6 Y0 ]2 B
  166.         default:+ O5 h' O4 z3 ]8 h; x9 V, q
  167.             WM_DefaultProc(pMsg);
    ) T! a! X# C- X% t# C% v2 U
  168.     }7 r3 l. i  e5 y3 x% T( T1 \* J
  169. }# A+ D4 R& }& M4 q

  170. * E% L" j9 N, L( t- L% W
  171. % p# U# @1 P7 _: I% g! T( D
  172. /*********************************************************************9 H# r# K0 [: @0 X2 {
  173. *
    4 @9 P! n7 |/ f
  174. *       MainTask
    9 U, Q+ T6 r$ Y' Q* A. G
  175. *
    * V3 C3 I0 ~) ^# [, S
  176. **********************************************************************
    6 O0 q* d  V9 w8 ^$ a% c7 `
  177. */, u# g$ i& Y. q# v0 E2 m
  178. void MainTask(void)
    ) t; [1 J5 D, d, J6 x
  179. { 2 P( {; K# t0 X" y
  180.     GUI_Init();
    ( T, p2 Q/ Q* N
  181.     WM_SetDesktopColor(GUI_BLUE);      /* Automacally update desktop window */
    1 \# Y& G$ [9 ^, Z1 m& o
  182.     WM_SetCreateFlags(WM_CF_MEMDEV);  /* Use memory devices on all windows to avoid flicker */: F3 T0 B3 `% V( J; |& c9 ?/ J
  183. PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
    + t7 q4 n' `! F8 o
  184. FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);
    % ]. \5 g, W3 r! j2 Y" A
  185. PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);4 Q# _9 H+ `( x! U  f/ i
  186. BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);2 L9 Z% d3 T, K$ L* w! s
  187. CHECKBOX_SetDefaultSkin(CHECKBOX_SKIN_FLEX);
    7 `# o" U, [& K7 }% O' ~8 `
  188. DROPDOWN_SetDefaultSkin(DROPDOWN_SKIN_FLEX);
    " B1 q6 H) x! m: _3 f: ^+ e
  189. SCROLLBAR_SetDefaultSkin(SCROLLBAR_SKIN_FLEX);# K. u4 T5 t$ e7 A( |, n& j
  190. SLIDER_SetDefaultSkin(SLIDER_SKIN_FLEX);
    1 K& U. q% m; W
  191. HEADER_SetDefaultSkin(HEADER_SKIN_FLEX);
    7 S# q: b4 v) x5 q
  192. RADIO_SetDefaultSkin(RADIO_SKIN_FLEX);4 K. Y: i6 F& E4 K6 z
  193.     GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0);! M' q% q! X+ G
  194. }
复制代码
1. 这里主要是实现按钮的WM_NOTIFICATION_CLICKED消息。如果用户按下这个按钮,那么就切换背景颜色。
2. 同上,只不过这里用的是另一个按钮。
3. 实际显示效果和上面33.4小节的贴图是一样的。
33.6 总结
    本期教程就跟大家讲这么多,只给大家具了部分消息类型的通信实例,后面还会通过更多例子来强化大家对这方面知识的理解。

2 g" H7 D  M. Z3 o5 W1 \9 K* ^
lkl0305 回答时间:2015-2-14 21:33:45
多谢分享!!!
超导式 回答时间:2015-2-14 21:48:48
感谢分享
MouseCat 回答时间:2015-2-15 09:03:13
好资料,收藏了哈
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版