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

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

[复制链接]
baiyongbin2009 发布时间:2015-2-28 11:08
特别说明:完整STemWin的1-60期教程和配套实例下载地址:链接, I" a' O3 J+ O& L) l* C; y
第41章 CHECKBOX-复选框控件
7 L. T0 l+ }- x) Q1 ~& }
    本期教程讲解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>
    7 {5 V% N7 [6 P5 [+ x" R
  2. #include "GUI.h"
      y" U' R; A2 ?; p, S
  3. #include "DIALOG.h"9 i. Z  e- Y  K; n# x$ `9 s
  4. #include "Main.h"
    6 {5 @: |# E8 R6 p! N/ F% f/ g1 V% {

  5. * G* \- Q: r& |! C+ K
  6. /*********************************************************************0 c" V# ?# V8 d' b" D* y, j) D- b) O
  7. *0 p( {* w4 M. t- L4 z; k' a+ m1 T
  8. *       Static data4 [, M1 B; J; C' L+ ~
  9. *
    8 l4 l  ~! }! d$ L2 o% g- q
  10. **********************************************************************
    " S# i3 Z& o' `( K
  11. */' x6 q) C4 w5 }2 ~5 j0 m
  12. - Q# ^1 `4 P' e3 X: Z" W4 k+ w/ Z! u
  13. //7 j4 Z- \$ e* N1 {8 `
  14. // Dialog resource0 C( @. f% }4 a4 u- c
  15. //1 ]/ ?  i8 r" c( F
  16. static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {(1)
    4 X' ~& k" O9 T% T7 V& Z
  17.   { FRAMEWIN_CreateIndirect, "Check box sample",   0,   10,  10, 300, 220, FRAMEWIN_CF_MOVEABLE},* d- ~! O" s7 W" X2 L3 d& n3 Y' U
  18.   { TEXT_CreateIndirect,     "Enabled:",           0,    5,  10, 120,   0 },
    + ?& d2 T7 G4 u
  19.   { CHECKBOX_CreateIndirect, 0,        GUI_ID_CHECK0,    5,  30, 120,   0 },
    4 a, ?5 G) o* S* e+ q, H
  20.   { CHECKBOX_CreateIndirect, 0,        GUI_ID_CHECK1,    5,  60, 120,   0 },
    7 X! `; [. q: \* U/ E
  21.   { CHECKBOX_CreateIndirect, 0,        GUI_ID_CHECK2,    5,  90, 120,   20 },
    ( ?* S" {1 c8 W; q
  22.   { CHECKBOX_CreateIndirect, 0,        GUI_ID_CHECK3,    5, 125, 120,   26 },
    ( N$ r: x7 h5 a* I
  23.   { TEXT_CreateIndirect,     "Disabled:",          0,  150,  10, 120,   0 },5 y) B5 i- _! Y
  24.   { CHECKBOX_CreateIndirect, 0,        GUI_ID_CHECK4,  150,  30, 120,   0 },# @- @" n7 W7 g2 F/ g$ c$ F
  25.   { CHECKBOX_CreateIndirect, 0,        GUI_ID_CHECK5,  150,  60, 120,   0 },
    0 F; X- [8 h. i1 }2 D; K+ x
  26.   { CHECKBOX_CreateIndirect, 0,        GUI_ID_CHECK6,  150,  90, 120,   26 },
    , i9 I, |. r; t8 ]1 }+ ]3 N9 P3 k
  27.   { CHECKBOX_CreateIndirect, 0,        GUI_ID_CHECK7,  150, 125, 120,   26 },* R1 Z' f0 @" w: G! O
  28.   { BUTTON_CreateIndirect,   "OK",         GUI_ID_OK,   10, 170,  60,  20 },
      A: q+ d; W8 O& [
  29.   { BUTTON_CreateIndirect,   "Cancel", GUI_ID_CANCEL,  225, 170,  60,  20 },
    + o: [$ j: B$ l( E
  30. };! v. u2 u0 v# E0 }, S# e& D5 u8 g

  31. 9 M; r) P0 I) [2 j3 A
  32. //7 R+ p. N. I, h8 y9 y
  33. // Check box text
    . [- t/ I4 i; N" k$ J: i$ }6 F
  34. //7 ~4 _( ~* {; U4 @
  35. static const char * _apLabel[] = {(2)" B9 }* Y" B8 u8 Q- U) r
  36. "Default",
    5 ?% x: {8 ^8 X  q0 H
  37. "3 States",8 X0 V1 X) Q9 a2 M8 f, H
  38. "Box XL",' e2 S2 |9 r& k5 \4 F: [, ?. D" t
  39. "Box XXL"
    7 q4 j5 g2 ]& \5 K2 M
  40. };
    ) Q/ W8 B8 g9 j

  41. & ?5 z8 C5 {2 d
  42. /*********************************************************************
    # q2 I6 G% O$ _8 H* U
  43. *
    1 s9 K3 X6 i0 ^7 n' J
  44. *       Static code
    2 k6 w9 n% X. U/ K6 E
  45. *8 `2 M) K- W: P: u: w! J! e' D
  46. **********************************************************************1 Y% j8 ?- @! K- |' r' D# T
  47. */
    + T' T" O1 X$ `
  48. /*********************************************************************
    9 F0 [: G2 r4 s- |* z# _$ G, W
  49. *
    ) ]2 j5 a) B) s0 |; |
  50. *       _cbCallback* X- U: q. S0 n" y5 v9 I& l
  51. */
    8 v% G3 r- T& h, i& B& R7 u. g
  52. static void _cbCallback(WM_MESSAGE * pMsg) {4 u7 P6 |4 }0 ~  O8 b; n" z7 ]! ~
  53.   WM_HWIN hDlg;4 R  P* ^% Y9 ~/ u2 l  \9 `
  54.   WM_HWIN hItem;
    9 q/ L  h* u& Q+ Y& x
  55.   int     i;
    : v8 U0 m- C; W& q2 o6 i
  56.   int     NCode;. L3 I, r4 S- J4 M
  57.   int     Id;
    % J) q* S8 T$ H. e3 l

  58. 9 _1 V- i. S7 k0 C, D
  59.   hDlg = pMsg->hWin;
    6 W) m; o' K6 I
  60.   switch (pMsg->MsgId) {
      b4 e" x8 M" K9 K1 o' r$ @* p
  61.     case WM_INIT_DIALOG:
    ! k# l( {8 c+ h( f1 N
  62.       WM_GetDialogItem(hDlg, GUI_ID_CHECK0);* @/ X# @! B: T1 D, l( y, E/ y
  63.       for (i = 0; i < 8; i++) {(3)6 A3 G  N- J4 C
  64.         int Index = i % 4;
    2 n2 u$ E: ?- g
  65.         hItem = WM_GetDialogItem(hDlg, GUI_ID_CHECK0 + i); // Get the handle of the desired checkbox
    9 v* B& m- K7 C7 X
  66.         CHECKBOX_SetText(hItem, _apLabel[Index]);          // Set the check box text(4)
    4 V% b9 y9 ]' u# V% B$ y2 ~5 \& V

  67. / m, l4 L- d6 m1 z4 K
  68.         switch (Index) {
    # d0 b0 ^- ?  X: i8 d
  69.         case 1:(5)
    : N  O( F* `4 S5 M, [
  70.           //4 k, J& d# z) P5 T7 G0 c' ], o
  71.           // Set the number of possible states to 34 u) r, k; s* J. T5 l- M" p
  72.           //% n$ n3 [( N+ a6 D% V4 p6 {
  73.           CHECKBOX_SetNumStates(hItem, 3);(6)
    : B9 ^9 |& m) P
  74.           //8 s2 a1 D) Y( p/ @; a8 _9 _, Q- F1 @
  75.           // Use user defined bitmaps for the third state
    4 `* q4 N: o5 G
  76.           //(7)
    6 }, t) w' L* s* p3 o8 B  {% |  P
  77.           CHECKBOX_SetImage(hItem, &_abmBar[0], CHECKBOX_BI_INACTIV_3STATE);  // Used if widget is disabled  R( o; s' Z+ \+ p( H' \" |: h
  78.           CHECKBOX_SetImage(hItem, &_abmBar[1], CHECKBOX_BI_ACTIV_3STATE);    // Used if widget is enabled
    " U& E1 C. y/ N- f+ k- F3 ~6 n
  79.           CHECKBOX_SetState(hItem, 2);(8)& X- s0 N  i$ ?6 H
  80.           break;# a8 w9 r( H2 A7 _. b; t1 L" p" c
  81.         case 2:(9)
    5 U1 E% \1 V: `* Y) K# V
  82.           CHECKBOX_SetState(hItem, 1);! m6 o3 r, c* ?! _3 v* O4 y8 a
  83.           //
    * k: j. X# f+ }5 m5 @4 l5 d/ t* u
  84.           // Use user defined bitmaps for the 'checked' state* p: V( P4 I% V8 B  _
  85.           //
    ) l: p$ @: a% h. V" B
  86.           CHECKBOX_SetImage(hItem, &_abmXL[0], CHECKBOX_BI_INACTIV_CHECKED);  // Used if widget is disabled
    " d3 s4 L7 h1 o& ~3 e# ?6 x  f
  87.           CHECKBOX_SetImage(hItem, &_abmXL[1], CHECKBOX_BI_ACTIV_CHECKED);    // Used if widget is enabled
    , _$ [9 C; H+ N8 [) Q& V6 w
  88.           CHECKBOX_SetFont(hItem, &GUI_FontComic18B_ASCII);
    1 N8 _( }' o" M
  89.           break;& k& g# ]: Z2 `8 A% h) i1 G* g% B* `
  90.         case 3:(10)# D! z- {8 b2 B* S3 _
  91.           CHECKBOX_SetState(hItem, 1);4 S- A5 P0 Z4 `% o3 X
  92.           //
    ! p( d$ E1 V4 E4 f% z" b, J
  93.           // Use user defined bitmaps for the 'checked' state
    7 _) W- }* Q2 J; b% d
  94.           //
    1 `2 g  _! F4 \
  95.           CHECKBOX_SetImage(hItem, &_abmXXL[0], CHECKBOX_BI_INACTIV_CHECKED); // Used if widget is disabled
      j5 A# i' X. Z3 ^' C( o: W- z
  96.           CHECKBOX_SetImage(hItem, &_abmXXL[1], CHECKBOX_BI_ACTIV_CHECKED);   // Used if widget is enabled
    - A3 Q: K$ E4 k& ^
  97.           CHECKBOX_SetFont(hItem, &GUI_FontComic24B_ASCII);
    $ n; X( v8 N1 a# T$ Z
  98.           break;
    ) J+ A' D- o; w5 a# d; p& m
  99.         }
    4 z. A7 S! n" ^) _, W
  100.         //+ j, h7 A- ?. }
  101.         // Disable all check boxes shown on the right side of the dialog* J1 S# P, [/ |1 R: |8 K) c2 M
  102.         //6 T  [8 a- w6 S4 t4 _, P
  103.         if (i >= 4) {(11)
    , l' {% ^2 Z# `8 Q( q" o1 G! W
  104.           WM_DisableWindow(hItem);  W! R  d3 [; Q- R5 Q7 u
  105.         }
    6 y9 D& s0 G' J5 @
  106.       }9 D, n0 U, c5 U$ \9 }6 [
  107.       break;9 [5 A, E% u  J; ^3 _4 F' v
  108.     case WM_NOTIFY_PARENT:
    & V0 E- t; c) L
  109.       Id    = WM_GetId(pMsg->hWinSrc);      // Id of widget
    # k! _. H) E7 R+ q2 O9 }- [' w# ?
  110.       NCode = pMsg->Data.v;                 // Notification code; a6 t( r: y4 u4 J
  111.       switch (NCode) {, o4 H) s7 q4 a
  112.         case WM_NOTIFICATION_RELEASED:      // React only if released' P3 Q0 _" j& V3 g4 }6 p$ P
  113.           if (Id == GUI_ID_OK) {            // OK Button
    ( f0 o/ d) F; |
  114.             GUI_EndDialog(hDlg, 0);8 e0 b4 u$ D- j; Q% k0 H7 ?
  115.           }7 j% z+ {! q$ T6 J$ T
  116.           if (Id == GUI_ID_CANCEL) {        // Cancel Button
    + _1 X/ J4 B+ ]  B- w, T/ t
  117.             GUI_EndDialog(hDlg, 1);
    7 g" n  E( O" p# V4 v
  118.           }
    ' q2 W3 X; `2 Q9 k$ v4 e0 \
  119.           break;0 u8 r7 h) F+ L
  120.       }
    3 R* ?* `( I4 P5 o$ A# e& M' _
  121.       break;$ X# t+ N+ o: O0 S/ a& P$ O5 K
  122.     default:/ E% `/ A+ M+ d' Z7 C3 w; Z
  123.       WM_DefaultProc(pMsg);
    1 k" t9 r8 ^2 J' s, F
  124.   }
    , u) x& o4 f( H" d/ V) a
  125. }
    9 M2 ?1 f0 H2 F# X# a

  126. 0 U- @  I+ B6 R9 A2 o# }
  127. /*********************************************************************
    5 D1 N0 V( @$ P+ j; M- W# \
  128. *
    5 d" j' j3 {% W( r  A% ], s6 Y
  129. *       Public code
    ' [7 [  U0 T  c9 o$ B
  130. *$ h( z5 V; y' ^3 f5 c, p; V
  131. **********************************************************************' K# f" l0 b7 z9 {# @# J4 R! S
  132. */. l& \3 A0 S- x- b% f
  133. /*********************************************************************  i0 ^1 Y+ Q' {/ T  {) g2 s
  134. *
    & ]5 n! R2 T. e4 E9 B
  135. *       MainTask  J' Z3 r$ `: Q7 v
  136. */
    & g, A, i5 b8 x7 ~# l: \
  137. void MainTask(void) {) q) H7 ]% c8 z0 l
  138.   #if GUI_SUPPORT_MEMDEV
    - _1 j5 c  U5 Q* j9 r* k
  139.     WM_SetCreateFlags(WM_CF_MEMDEV);
    ' c* l% [/ Q, V3 q; Z. X
  140.   #endif
    3 j8 Y9 B" b. P( P0 X
  141.   GUI_Init();. q1 }! O4 ~! V% n8 k
  142.   WM_SetDesktopColor(GUI_BLACK);
    / W% Y+ W6 O0 r! \1 H
  143.   while (1) {% i9 Q9 K  ~6 h: n( l# @( ?
  144.     GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0);
    - l" b( M' _2 M; w, c2 i6 {5 k
  145.     GUI_Delay(500);& H  g* z  @+ n
  146.   }
    - L1 z# }! }- a
  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大家都可以试试。
  R0 {, C- E. `' j' O
赞 收藏 评论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管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版