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

【安富莱STemWin教程】第49章 MESSAGEBOX-消息框控件

[复制链接]
baiyongbin2009 发布时间:2015-3-9 15:45
特别说明:完整STemWin的1-60期教程和配套实例下载地址:链接- V- r6 O" B3 d+ p
第49章 MESSAGEBOX-消息框控件
: r2 K( D* R7 Z9 B8 v' @
    本期教程讲解STemWin支持的消息框控件。
    49. 1 消息框控件介绍
    49. 2 官方DIALOG_MessageBox实例
    49. 3官方DIALOG_MessageBoxUser实例
    49. 4 总结
49.1 消息框控件介绍
    使用MESSAGEBOX控件可在带有标题栏和 “确定”按钮 (必须按下才能关闭窗口)的框架窗口中显示消息。创建消息框或者创建并执行消息框仅需一行代码。下表显示MESSAGEBOX小工具的外观:
49.1.png
    消息控件的使用比较简单,仅有两个相关的API:GUI_MessageBox()和MESSAGEBOX_Create()。
49.2 官方DIALOG_MessageBox实例
    官方的这个实例很好的演示了MessageBox的使用,这个例子在模拟器中的位置:
49.2.png
源码如下(程序中进行了详细的注释):
  1. ----------------------------------------------------------------------
    - h/ f% X' f  W" W' {
  2. File        : DIALOG_MessageBox.c- A2 h- i; ]" [/ d7 ?" X3 I
  3. Purpose     : Example demonstrating GUI_MessageBox0 f4 B8 m6 Q. W. R- M" D
  4. Requirements: WindowManager - (x). A+ U& w0 r  M: n3 H. t" n; u
  5.               MemoryDevices - (x)
    ' W$ a& r6 p) a+ Y* u7 g8 _
  6.               AntiAliasing  - ( )! i, L9 J. k; u, \7 k
  7.               VNC-Server    - ( )7 e; e' b+ i: t5 Q7 O7 N/ u$ r. q
  8.               PNG-Library   - ( )$ r3 Y& k) W8 W* ^: x; m2 Y: T7 \
  9.               TrueTypeFonts - ( )! a; t" \4 v; }% p) B0 t
  10. ----------------------------------------------------------------------
    # M3 {" f8 f0 T3 ?2 l3 a
  11. */
    ! r  Y! |5 S% L% n% f
  12. ( x* k# z/ [! h7 _
  13. #include "GUI.h"
    1 E8 h* J' K* I  u/ M- D/ e' W
  14. #include "WM.h"7 K, C" M0 h6 \5 V; j; j

  15. 9 {% S' {5 {( {4 @9 z
  16. /*******************************************************************' D4 I: [* \; O/ ]
  17. *, N# t/ k! ~1 N& P% _" |
  18. *       Static code7 o3 G, U6 b8 f4 {1 {
  19. */ _/ A/ M( J+ U( |  D; R. {
  20. ********************************************************************1 m0 C4 ~% J  D2 j. _7 n8 J  r
  21. */
    ) G! b9 [2 l$ w
  22. /*********************************************************************  E5 A/ u9 B) b) \; l# i' b
  23. ** b. I. Q- v# C+ T  z5 A' G% _, r
  24. *       _cbBkWindow
      r2 l0 l& D6 N3 I
  25. *    桌面窗口的回调函数
    ( h6 q6 g8 X) v/ j0 _% i3 Z
  26. */
    1 ]4 A0 ]6 f+ X/ C& a. I. m' \* k# d
  27. static void _cbBkWindow(WM_MESSAGE* pMsg) {# T/ a9 t" {7 u& Q
  28.   switch (pMsg->MsgId) {7 [- o+ c, `$ T! P% N* l& e
  29.   case WM_PAINT:
    % ]7 U/ F  Y" q* S
  30.     GUI_SetBkColor(GUI_RED);4 B" M9 V7 K) ?) X/ Q; g$ l
  31.     GUI_Clear();" P: s$ R. F. [
  32.     GUI_SetColor(GUI_WHITE);% t' Z" b% f* ^2 ?9 z+ K: z, M
  33.     GUI_SetFont(&GUI_Font24_ASCII);9 ~* v; q3 ?& x; n& v  g
  34.     GUI_DispStringHCenterAt("DIALOG_MessageBox - Sample", 160, 5);
    1 t* W2 J" D0 b- ^+ J/ m
  35.     break;8 F. l8 m" S$ x9 _+ N1 F
  36.   default:0 ^- H" [) ]5 ^, L- h2 r. p; R
  37.     WM_DefaultProc(pMsg);
    ; ~$ \" g/ }  U. S# d2 o6 u
  38.   }
    5 x; T4 E2 \. G8 Q, s! \6 ]
  39. }1 C6 p+ c9 p, C9 N4 x0 ^

  40. ; L* J- s. b1 m' J- d- H3 L0 }& j
  41. /*********************************************************************
    * S' J8 {: g' f2 x( f) o
  42. *
    ! J3 w- ^! J2 h' a) q
  43. *       Public code& j1 m  A/ Y! Y- M1 t& B
  44. *
    7 C1 x8 U& {* c% }, B; x
  45. **********************************************************************
    2 t, c0 N! Q$ N( L' e
  46. *// Y3 G) j% C8 m8 ]( }! t
  47. /*********************************************************************
    / q& {; g6 M7 {3 |/ {' l
  48. *# Y% c/ p9 O' n" g; n6 t) u
  49. *       MainTask0 G& O, o% z& N3 p) i$ \
  50. */
    " c! f! x2 C, B4 B
  51. void MainTask(void) {
    1 p5 Q! ~+ B3 X# Z' e8 ?8 i6 D
  52.   GUI_Init();6 l4 f" h7 u. Z. W/ j) }
  53. % e4 U  H1 ~/ m
  54.   /* 开启窗口使用内存设备 */
    # |# J8 i0 F0 x/ o4 Q  V  @8 {4 f
  55.   #if GUI_SUPPORT_MEMDEV4 b2 m$ y  r/ ^; _% \
  56.     WM_SetCreateFlags(WM_CF_MEMDEV);
    - ^( q3 ^' ?6 a2 K& _# }. w; d0 S
  57.   #endif
    " @7 U3 t2 x/ _" {: E$ U+ e
  58.   /* 设置桌面窗口的回调函数 */$ a% ^/ y: L- x8 N. I7 q
  59.   WM_SetCallback(WM_HBKWIN, &_cbBkWindow);
    : G& l# J, `5 S! _

  60. 1 y3 W& X5 }- v: s0 J
  61.   //1 L0 m4 _8 y& r4 T8 K+ Z8 q3 D6 b
  62.   // 创建消息框,等待直到他被关闭. X# h9 P$ G+ V! l& r
  63.   //
    . I3 G3 A3 h4 Y/ n- M: ~
  64.   while (1) {
    * g$ D5 L. I# K. d; K
  65.     GUI_MessageBox("This text is shown\nin a message box",9 K/ W  Y) h" o9 g* v- G9 i- M
  66. "Caption/Title", GUI_MESSAGEBOX_CF_MOVEABLE);5 G# O2 q4 g- _
  67.     GUI_Delay(750);                    // 延迟一段时间
    : e% G5 P5 J8 r: a+ e# |% D
  68.     GUI_MessageBox("New message !",
    6 J% A3 _) ]7 m. g' b
  69. "Caption/Title", GUI_MESSAGEBOX_CF_MOVEABLE);( N" k' S1 ?7 h1 H% |9 {
  70.     GUI_Delay(750);7 x2 D' s7 r% ~! L8 G
  71.   }
    ! ]7 g% a7 |  Z4 j
  72. }
复制代码
实际显示效果如下:
49.3.png
赞 收藏 评论5 发布时间:2015-3-9 15:45

举报

5个回答
baiyongbin2009 回答时间:2015-3-9 15:46:33
49.3 官方DIALOG_MessageBoxUser实例
    官方的这个实例很好的演示了MessageBox的使用,这个例子在模拟器中的位置:
49.4.png
源码如下(程序中进行了详细的注释):
  1. /*********************************************************************# g7 j% D: q0 W( }
  2. *
    1 R9 x* {% L% D& I. Q9 @
  3. * Static code" R) T/ `* G; u+ ?+ h( r9 ?- V
  4. *7 T4 ?+ v8 x) B7 X: J& R9 |
  5. **********************************************************************$ F+ v2 s# }; f. L
  6. */
    . c3 \/ I9 ]8 c4 |3 }4 R
  7. /*********************************************************************
    : Y! e3 d% ]8 W" D2 J5 ]
  8. *
    % Z5 V7 y5 [1 O6 k6 a5 R" L
  9. * _CreateMessageBox
    $ O7 N4 u; n4 p9 m" S3 z$ D+ R
  10. */( \& v* i) F2 t& J
  11. static WM_HWIN _CreateMessageBox(const char * sMessage, const char * sCaption, int Flags, const GUI_FONT * pFont) {3 v9 T/ Q  r1 G. Z8 m
  12. WM_HWIN hWin;
    : a. v+ y* Z3 X  z' V' `! r4 E
  13. WM_HWIN hItem;
    $ d' o$ [( R0 l8 I0 A
  14. GUI_RECT Rect;
    # q9 V8 p9 j" U/ x8 t1 ~

  15. % V' L* \/ w) z3 b0 Z
  16. hWin = MESSAGEBOX_Create(sMessage, sCaption, Flags);
    ( o# h. P8 k# r$ s; A: {
  17. //; `5 m) Q! B0 G9 v$ g, \/ i3 I: g5 f
  18. // 设置消息框中标题的字体,消息框本质上也是框架窗口,所以这里可以直接的调用修改0 d3 E6 V7 N% Z' N& l! b* C
  19. //, m, b& \! T- \
  20. FRAMEWIN_SetFont(hWin, pFont);
    8 Q" g8 y* z2 [) T
  21. //
      H! K% {7 A$ `" W
  22. // 调整大小
    1 x1 i/ ?& p& ?7 e- G- k4 K
  23. //
    1 u* C) p" D$ m! b  R7 W
  24. WM_GetWindowRectEx(hWin, &Rect);* K& b1 y6 m* E* e+ ?
  25. WM_SetWindowPos(hWin, Rect.x0 - 15, ; |0 A1 A3 e! M& w/ R" [- j
  26. Rect.y0 - 15,
    , c* @" N" q! z$ q1 `9 }$ q
  27. Rect.x1 - Rect.x0 + 1 + 30, ' |- ~' k9 d6 m8 g8 R
  28. Rect.y1 - Rect.y0 + 1 + 30);* K- c, v$ ^% E
  29. //9 G$ ^7 i1 E" Y0 o$ U$ @8 m! N
  30. // 设置按钮控件的字体
    9 @  ]6 d2 L2 M$ g
  31. //+ ?8 R# T; @  C# _
  32. hItem = WM_GetDialogItem(hWin, GUI_ID_OK);7 d6 v. w) M, ~, }
  33. BUTTON_SetFont(hItem, pFont);& ?: d1 J. D; j- q0 y) [
  34. //" A7 n& l' O% o1 _, S" O
  35. // 调节按钮控件的大小
    + ]; w+ u6 V, u/ a0 d
  36. //% `$ @5 G- F8 [! Y
  37. WM_GetWindowRectEx(hItem, &Rect);. t/ i) G: a8 Q; \
  38. WM_SetWindowPos(hItem, Rect.x0,
    : m5 \; y% Y9 Q- B8 X, P
  39. Rect.y0 + 10, ( ]" z: `& o/ B3 i/ i( a
  40. Rect.x1 - Rect.x0 + 1 + 30,
    ( D3 R. o4 A5 U
  41. Rect.y1 - Rect.y0 + 1 + 5);
    & S' `+ y/ i0 E6 }" ^4 O! Z( E
  42. //
    9 K% K  u9 R/ o. l7 x5 V
  43. // 设置文本控件的字体% K$ }' ^+ b% Z
  44. //
    # r7 W4 M: Q. u2 g7 G0 i, f( E
  45. hItem = WM_GetDialogItem(hWin, GUI_ID_TEXT0);
    2 B3 D- _! |8 ~) W% k# L3 ^
  46. TEXT_SetFont(hItem, pFont);# I0 i# O, l8 ^2 F% `, |( v5 U
  47. //
    5 S0 G. Q8 J4 b* C6 Z
  48. // 调节文本控件的大小0 m* `! `) W* g+ a* T
  49. //% m; q0 j& p$ L8 j1 x1 J
  50. WM_GetWindowRectEx(hItem, &Rect);% `4 p0 b* Z$ }9 u
  51. WM_SetWindowPos(hItem, Rect.x0, ; L% e2 _+ @* X2 c7 I" W$ W) P- b; j2 L
  52. Rect.y0, + X1 T) p* ?" Q: K$ J
  53. Rect.x1 - Rect.x0 + 1 + 30, # d' s; y( H3 y  \& g' k6 p
  54. Rect.y1 - Rect.y0 + 1 + 12);6 `% h, U6 D  L  E- K( y
  55. return hWin;: |& g5 e  F% P: p  j# L6 C
  56. }! G1 B" H5 R- r8 i" t# d

  57. 1 r2 N" ]- @4 A( m5 R3 D
  58. /*********************************************************************
    ' a0 q0 D4 b: u" {5 w6 M  o' N0 p2 Q& w
  59. *) |8 X( P* Z  K9 l9 z
  60. * _EnableSkinning
      Y9 m: U9 X% `
  61. */
    , l8 u) S1 d- p, V8 e0 A$ M' y
  62. static void _EnableSkinning(void) {
    : u' q2 j. J- G  b" D
  63. FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);0 _# o1 a4 E: L. C. R  L/ \
  64. BUTTON_SetDefaultSkin (BUTTON_SKIN_FLEX);) I- p. B2 i" Q' T- l$ e( F2 d
  65. }" b$ S- r! ~  ~
  66. . `$ V+ V" U$ s( ?! L; W
  67. /*********************************************************************$ P7 X2 A4 L2 M% B8 h- B
  68. *7 \& ?& |7 o8 a7 ~
  69. * Public code9 r" _9 }9 B! W5 |1 U! D+ e
  70. *
    ) X( K. `/ X/ J/ X! G
  71. *********************************************************************** I! _' T8 @5 O2 p% l8 ^) c. l
  72. */& @; p. G) b5 Y9 C* S
  73. /*********************************************************************
    ) k; Z7 g4 `- F, |
  74. *5 b7 B' f+ m: R+ c  R# Z5 R: {* t2 N" s
  75. * MainTask
    * \1 M0 ?5 d0 V; O0 E
  76. */( S. ]  N  i5 ~) b4 r
  77. void MainTask(void) {
    5 @5 e7 N) k: k& t8 a" a
  78. GUI_Init();
    + P7 N5 F/ J. x) W4 o* S3 q6 n  K
  79. /* 使能皮肤 */1 v" T* }9 Q. e- _' }+ v* |, t& a" b  ^
  80. _EnableSkinning();5 r' \( y( g& R* d+ n) {
  81. while (1) {* u1 K. A8 j, R# m6 d
  82. GUI_SetFont(&GUI_Font20B_ASCII);8 J( ~0 Y6 b8 e- Y
  83. GUI_DispStringHCenterAt("Applicatoin defined MESSAGEBOX", 160, 5);7 E0 l( ]; W' z  L! T  I
  84. /* 执行已经创建的对话框 */9 ?3 `, @+ x  v* R, o) M" X3 D  {
  85. GUI_ExecCreatedDialog(_CreateMessageBox("Message", "Caption", 0, &GUI_Font24));
    , l$ \3 b) F- M! |
  86. GUI_Clear();  c  \- Q) b/ h
  87. GUI_Delay(1000);4 G# G# P& U+ z
  88. }
    " h6 v4 ?2 K+ n6 J8 E$ `" ]6 g
  89. }
复制代码
实际显示效果如下:
49.5.png
49.4 总结
    本期教程主要是跟大家讲解了消息框的两种创建方法,一种是系统自带的,直接调用即可显示,也就是本期教程中的第一个例子。另一种是用户的创建方式,这种模式下用户可以自定义在消息框中要显示的内容。

# i6 }4 o# e" H8 ~  ]: V. {
lkl0305 回答时间:2015-3-9 16:51:36
多谢分享!
bit 回答时间:2015-3-9 17:51:22
控件好搞不
caiyuhui74748 回答时间:2015-8-1 15:58:01
Mark            学习学习
mark0668 回答时间:2015-8-2 04:13:21
学习学习
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版