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

【安富莱STemWin教程】第41章 CHECKBOX-复选框控件

[复制链接]
baiyongbin2009 发布时间:2015-2-28 11:08
特别说明:完整STemWin的1-60期教程和配套实例下载地址:链接
' ]- @# Z/ t3 H, m
第41章 CHECKBOX-复选框控件

) P( P. l! ?  n& ~( j
    本期教程讲解STemWin支持的复选框。
    41. 1 复选框控件介绍
    41. 2 官方WIDGET_CheckBox实例
    41. 3 总结
41.1 复选框控件介绍
    复选框是选择各种不同选项的最常用控件之一。用户可选中或取消选中复选框,并且可一次选中任意个框。使用键盘界面时,被聚焦的复选框的状态可使用<SPACE>键切换。禁用的框显示为灰色,如下图所示,其中描述了每种可能的复选框的外观:
41.1.png
开启皮肤色后显示效果如下:
41.2.png
41.1.1 复选框支持的通知代码
    以下事件是复选框控件作为WM_NOTIFY_PARENT消息的一部分发送给其父窗口的:
消息
描述
WM_NOTIFICATION_CLICKED
复选框已被点击。
WM_NOTIFICATION_RELEASED
复选框已被释放。
WM_NOTIFICATION_MOVED_OUT
复选框已被点击,且指针已移出复选框并且没有释放。
WM_NOTIFICATION_VALUE_CHANGED
复选框的状态已改变。
41.1.2 按钮支持键盘反应
    如果控件具有输入焦点,则它将对下列各键做出反应:
按键
反应
GUI_KEY_SPACE
切换小工具的选中状态
41.2 官方WIDGET_CheckBox实例
    官方的这个例子做的很好,充分的演示了复选框的各个状态。这个例子在模拟器中的位置:
41.3.png
源代码如下(主要看WIDGET_Checkbox中的代码):
  1. #include <stddef.h>  a% x, Q4 _2 n2 S7 \: C. q" O
  2. #include "GUI.h"
    9 N. t4 F3 y5 B# V6 E. F; X! I, t6 h
  3. #include "DIALOG.h"
    ' Q2 O$ z% e) y& u: L+ `
  4. #include "Main.h"; i1 J5 U3 s/ v7 C
  5. 0 j8 T: v! i% l1 o. I$ A* D
  6. /*********************************************************************
    : o% i0 ]$ a7 j4 o0 f! r% [
  7. *
    2 d* B! V5 p' n' J$ \
  8. *       Static data
    * N. N7 R& `- @" _8 \
  9. *
    5 s5 l  o. b7 Y: o( ]
  10. **********************************************************************- b7 I4 S7 G. c0 A
  11. */7 n: k* [$ m+ Z" W( W

  12. % ?/ L2 W9 l+ I5 }4 o) y  c9 U
  13. //$ z5 J+ i* h  E2 P8 i
  14. // Dialog resource
    ; h' \, G  ~; S1 b3 Z" ]& K
  15. //
    ( K$ j! X- y, i2 G+ ~
  16. static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {(1): R. R& o+ X- f0 g" _9 L' f9 _
  17.   { FRAMEWIN_CreateIndirect, "Check box sample",   0,   10,  10, 300, 220, FRAMEWIN_CF_MOVEABLE},( [) S4 H' x9 P& X3 J% u
  18.   { TEXT_CreateIndirect,     "Enabled:",           0,    5,  10, 120,   0 }," `# U+ y' `5 J8 C' ^/ M2 b
  19.   { CHECKBOX_CreateIndirect, 0,        GUI_ID_CHECK0,    5,  30, 120,   0 },
    ' c) P$ I9 v' Z8 `1 t4 i1 v
  20.   { CHECKBOX_CreateIndirect, 0,        GUI_ID_CHECK1,    5,  60, 120,   0 },5 }: ~6 ~# Y' y% D$ N' n$ d) k; y
  21.   { CHECKBOX_CreateIndirect, 0,        GUI_ID_CHECK2,    5,  90, 120,   20 },& S8 C& r8 e- A) Z" ]
  22.   { CHECKBOX_CreateIndirect, 0,        GUI_ID_CHECK3,    5, 125, 120,   26 },
    ' ]' U- m* o/ E* S1 n) \: H
  23.   { TEXT_CreateIndirect,     "Disabled:",          0,  150,  10, 120,   0 },0 _: i: ?* p) T: y  e
  24.   { CHECKBOX_CreateIndirect, 0,        GUI_ID_CHECK4,  150,  30, 120,   0 }," l7 S0 p! `+ g4 L2 y  h% ^
  25.   { CHECKBOX_CreateIndirect, 0,        GUI_ID_CHECK5,  150,  60, 120,   0 },
    0 Y5 q. C* X, r
  26.   { CHECKBOX_CreateIndirect, 0,        GUI_ID_CHECK6,  150,  90, 120,   26 },1 ^5 P: N  \1 Y9 k
  27.   { CHECKBOX_CreateIndirect, 0,        GUI_ID_CHECK7,  150, 125, 120,   26 },
    & P# I2 A3 k* E; M/ W3 l- n
  28.   { BUTTON_CreateIndirect,   "OK",         GUI_ID_OK,   10, 170,  60,  20 },8 D+ t, x7 B: W& Q: E6 q6 f4 N  C' B
  29.   { BUTTON_CreateIndirect,   "Cancel", GUI_ID_CANCEL,  225, 170,  60,  20 },
    ) S( m- U, |* |' S( \, r+ @
  30. };
    6 h4 X. u0 @. Q* P. d, `5 A

  31. # y% i* i0 d3 O5 ~+ H# F2 Y) Z
  32. //
      P6 U# n) j, P% L  m' J
  33. // Check box text7 ?( ?3 o0 p" e) R8 d7 |
  34. //
    ! Q6 t; f! p' Q" o+ s5 H8 ?
  35. static const char * _apLabel[] = {(2)* ^7 k: Y3 U+ U2 A
  36. "Default",
    ( \% {  H& N! [& _& }3 K9 ~
  37. "3 States",
    " B% r: }) Y1 S
  38. "Box XL",
    ) Z, J- I! ^% W; h
  39. "Box XXL"  U# y5 r7 R/ i5 ^
  40. };6 L# B# ^% B& }/ W

  41. 9 ^  g# ~; j4 `6 ^% G
  42. /*********************************************************************/ @) I' q+ w( M( t0 e
  43. *
    9 w/ p% l: v5 ]  h! ^/ O" P
  44. *       Static code
    7 f- n; N& [, W- m/ y' b* |
  45. *& A; K4 N8 i5 ^1 n" C$ M
  46. **********************************************************************
    3 y" ~, u# ^+ b" x
  47. */
    0 \, u! _4 m6 |8 m
  48. /*********************************************************************
    ) w  D; U1 T  o; _/ n' T7 q
  49. *
    4 O, ~. c$ b7 [9 L; a, f9 q8 O
  50. *       _cbCallback: l3 I+ B& ~8 F. P2 I$ C
  51. */
    ! M0 W7 p- w% n+ l4 J3 Z
  52. static void _cbCallback(WM_MESSAGE * pMsg) {: @$ H' [2 F. ~# _" |0 U
  53.   WM_HWIN hDlg;
    ' b% U0 U* p. @1 k& @
  54.   WM_HWIN hItem;, D2 O; F4 ~2 ]. E) I! Q+ n
  55.   int     i;$ I( B2 ]% `5 m1 `4 `1 z1 u
  56.   int     NCode;
    9 V; I/ X+ w+ f: ^8 @
  57.   int     Id;
    ( S3 A5 X7 |2 l! e/ f1 I' r
  58. + M+ {3 P. [! D) N
  59.   hDlg = pMsg->hWin;
    3 \) K1 g, L% o* f/ s. K
  60.   switch (pMsg->MsgId) {
    4 H8 ?/ M4 d7 |$ k8 I
  61.     case WM_INIT_DIALOG:( C6 v" M) @2 _
  62.       WM_GetDialogItem(hDlg, GUI_ID_CHECK0);
    ( o  Y7 ^) h, D* J1 C! H. r, a) }- j
  63.       for (i = 0; i < 8; i++) {(3)
    + Y" ~% l3 S1 _/ Y
  64.         int Index = i % 4;
    1 Z- f' u- F% r  f1 y5 p& l* Z
  65.         hItem = WM_GetDialogItem(hDlg, GUI_ID_CHECK0 + i); // Get the handle of the desired checkbox+ |2 G  \" W0 F% N
  66.         CHECKBOX_SetText(hItem, _apLabel[Index]);          // Set the check box text(4)
    ' A* I6 x: z6 V2 H5 y7 p

  67. * ~- Z9 g9 f- j( m; M
  68.         switch (Index) {
    8 B9 V) j; q6 r4 ~1 `
  69.         case 1:(5)
    / A7 y# L+ a7 @
  70.           //* D8 `* K9 e% G( F/ Y
  71.           // Set the number of possible states to 3
    + }$ V$ G/ b  S, L* \! C0 X- ~3 c
  72.           //+ G, Z7 Q4 G: [, [' L9 |
  73.           CHECKBOX_SetNumStates(hItem, 3);(6)* c. F- w# W# A+ P
  74.           //
    . O" J- T# ^# }$ t: |7 }% q" l
  75.           // Use user defined bitmaps for the third state
    8 I' @" C9 x, Q6 k6 |% g( _: q( p3 M
  76.           //(7)
    8 c* b6 t; R% D* x" p& u& Q# m/ o
  77.           CHECKBOX_SetImage(hItem, &_abmBar[0], CHECKBOX_BI_INACTIV_3STATE);  // Used if widget is disabled" J9 L9 n; ~0 I( U% @3 L5 q: q  q! @
  78.           CHECKBOX_SetImage(hItem, &_abmBar[1], CHECKBOX_BI_ACTIV_3STATE);    // Used if widget is enabled" z& }2 ?* j" G. R1 D; s1 ?
  79.           CHECKBOX_SetState(hItem, 2);(8)
    9 v2 N3 z! S2 m7 W2 ?* N: o
  80.           break;
    # F5 c& J2 W( m& i8 I1 `" f0 |
  81.         case 2:(9)
    7 n" W- x' W2 k3 v" r* b0 r3 ~0 ~
  82.           CHECKBOX_SetState(hItem, 1);, |$ C& A- X1 v* a! P: O3 J5 o
  83.           //
    . \3 x- P5 [! [' U: J; E% Y
  84.           // Use user defined bitmaps for the 'checked' state
    5 J! |! s# [. ~( T0 x2 b8 t
  85.           //1 O4 v6 J% C$ ^
  86.           CHECKBOX_SetImage(hItem, &_abmXL[0], CHECKBOX_BI_INACTIV_CHECKED);  // Used if widget is disabled0 |# Z9 J$ [* J
  87.           CHECKBOX_SetImage(hItem, &_abmXL[1], CHECKBOX_BI_ACTIV_CHECKED);    // Used if widget is enabled * [1 J- `4 K3 a
  88.           CHECKBOX_SetFont(hItem, &GUI_FontComic18B_ASCII);4 ^3 M$ B: f! a) _* j( A! `& }
  89.           break;
    1 r$ Q3 `9 P. K/ H, K4 P/ ?8 J. R
  90.         case 3:(10)
    6 s' h, \( Z) N4 S' }
  91.           CHECKBOX_SetState(hItem, 1);( a$ V9 H" |' ]! v" G
  92.           //
    5 n$ E# Q5 t3 G: [
  93.           // Use user defined bitmaps for the 'checked' state4 H& J/ y' R+ N9 [4 {$ g5 w  s' k
  94.           //& ~8 Q/ q4 G) ]$ _& I2 m6 _
  95.           CHECKBOX_SetImage(hItem, &_abmXXL[0], CHECKBOX_BI_INACTIV_CHECKED); // Used if widget is disabled6 D3 R4 C7 ~0 g+ \1 T/ q' D
  96.           CHECKBOX_SetImage(hItem, &_abmXXL[1], CHECKBOX_BI_ACTIV_CHECKED);   // Used if widget is enabled
    5 I) s6 e  v5 M9 j. x& W9 p) o
  97.           CHECKBOX_SetFont(hItem, &GUI_FontComic24B_ASCII);* H0 |3 F$ R6 E2 s  W% w1 x% I, L1 K
  98.           break;$ {& D3 S5 O, t; I! j, l
  99.         }  q5 b, G4 O0 f, t8 E* A
  100.         //
    9 |! r; ^' R& r2 L" Y: l
  101.         // Disable all check boxes shown on the right side of the dialog
    8 _* D( R3 E- X1 \6 R" ]
  102.         //3 D$ K0 m* \% a1 R! \
  103.         if (i >= 4) {(11)
    ; ]( i8 J/ w$ l& ~- d! Y. X
  104.           WM_DisableWindow(hItem);+ R5 j% J7 S; D# W
  105.         }
    # Q* e4 E7 z/ k3 z* g5 r
  106.       }/ R* u% k) Q6 |0 x6 ]5 J
  107.       break;
    , v3 Q3 \- j  t2 c& C  g& ^" h) A
  108.     case WM_NOTIFY_PARENT:
    ) Q$ a* H& P& H* @
  109.       Id    = WM_GetId(pMsg->hWinSrc);      // Id of widget* Z# E7 t( e: M
  110.       NCode = pMsg->Data.v;                 // Notification code
    % U+ }+ N  e4 i- T0 }
  111.       switch (NCode) {
    2 N9 }5 y# V) o) U
  112.         case WM_NOTIFICATION_RELEASED:      // React only if released6 b) ]- F0 d6 O  F8 G' e
  113.           if (Id == GUI_ID_OK) {            // OK Button
    8 ]' }/ u$ W6 V' ]3 t
  114.             GUI_EndDialog(hDlg, 0);
    / R; H2 O. R% w: W' x! H; p
  115.           }
    & ]* O# f" o( c1 A9 l
  116.           if (Id == GUI_ID_CANCEL) {        // Cancel Button3 Y" B; o' Q* ]* a9 @2 p. v
  117.             GUI_EndDialog(hDlg, 1);
    7 r) l' J: y4 j
  118.           }
    + t" g" ?. H. b( k9 T! \1 B( n
  119.           break;
    " |% h, z* H: ?- A& T' U
  120.       }) Y( ]0 _% w1 S' K$ U, r! H* ]. p' P
  121.       break;& `+ q- g: \5 s+ t/ A
  122.     default:
    ( n5 _6 {& E- s: l0 e: t
  123.       WM_DefaultProc(pMsg);4 K4 h# R" x2 p1 O; x6 R- U( d
  124.   }
    ! ?  R1 ]1 [$ v( C
  125. }* }, b' y( [+ u1 k- \# q' {
  126. 2 k* O8 S" D, E* o
  127. /*********************************************************************
    1 a2 X  A9 h' u- u2 l; H
  128. *1 s4 X2 e8 C2 k& j, P
  129. *       Public code/ A$ ]8 `) m& L
  130. *  ^% Q" ]4 R5 k
  131. **********************************************************************
    : p4 H0 B7 v( o2 R$ i
  132. */" i& ~: s6 J- _# C' [  W& w! d  H
  133. /*********************************************************************
    * a6 d( j* I, L/ I. j
  134. *
    # v) ?3 W' K# W/ O
  135. *       MainTask/ P8 }7 I. b/ n! q$ t/ p
  136. */
    # ~& J3 f! G! _2 N* [# f# K9 h
  137. void MainTask(void) {+ k8 J! B4 a4 o! \8 L2 m
  138.   #if GUI_SUPPORT_MEMDEV
    ) X9 G9 z0 ], e
  139.     WM_SetCreateFlags(WM_CF_MEMDEV);2 \* \3 G( N  H8 V! c
  140.   #endif! O" A; J9 |  c. F. L
  141.   GUI_Init();
    ( a$ _% g3 b! _% ~
  142.   WM_SetDesktopColor(GUI_BLACK);
    2 C1 m6 z) q& G, i; a
  143.   while (1) {0 A' S8 h9 X) O: B
  144.     GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0);
    6 d6 \/ \( R  K1 S: M4 R
  145.     GUI_Delay(500);
    4 _8 o7 |4 [% w, z
  146.   }& U: }: `" m( S
  147. }
复制代码
1. 对话框中控件的资源表,具体每个控件的参数,看前面38.6.1的介绍。
2. 复选框要显示的文本。
3. 循环8次,为8个复选框进行设置。
4. 函数CHECKBOX_SetText用于设置复选框旁边的可选文本。
5. 确切的说这里的case 1应该算是显示的第二种情况,为了方便起见,我们讲起称之为第一种情况,因为前面已经显示了一种情况。也就是i%4 = 0的情况。
6. 函数CHECKBOX_SetNumStates用于设置复选框可能的状态个数,默认情况下,复选框支持2种状态:选中(1)和未选中(0)。如果复选框要支持第三种状态,可将可能状态增加到3种。
7. 函数CHECKBOX_SetImage用于设置复选框被选中后显示的图像。图像必须填充复选框的整个内部区域。使用此函数时,要确保用于创建小工具的复选框的尺寸足以显示位图和 (可选的)文本。
8. 函数CHECKBOX_SetState用于设置复选框的状态,支持三种状态的显示,可以是选中,取消选中和第三种状态。
9. 情况二,显示一种稍大点的复选框。
10. 情况三,显示一种再大点的复选框。
11. 通过这个函数来禁止右侧复选框的状态。
实际的显示效果如下:
41.4.png
41.3 总结
    本期教程主要是跟大家讲解了复选框控件的使用,希望大家可以把本期教程中讲的这个例子跑跑,然后自己设计一个相关的例子进行试验学习。教程中只是使用了部分的复选框API,其它的API大家都可以试试。
% U. O0 Z7 T: k4 y3 I
收藏 评论7 发布时间:2015-2-28 11:08

举报

7个回答
feel-376797 回答时间:2015-2-28 11:33:29
谢谢分享
wamcncn 回答时间:2015-2-28 14:18:40
教程真多啊,学的比教的忙
MouseCat 回答时间:2015-2-28 14:36:03
收藏了,谢谢
wyxy163@126.com 回答时间:2015-2-28 16:21:18
提示: 作者被禁止或删除 内容自动屏蔽
wyxy163@126.com 回答时间:2015-2-28 16:21:37
提示: 作者被禁止或删除 内容自动屏蔽
lkl0305 回答时间:2015-2-28 20:40:35
多谢分享
埃斯提爱慕 回答时间:2015-3-1 16:03:57
提示: 作者被禁止或删除 内容自动屏蔽

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版