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

【安富莱STemWin教程】第57章 WINDOW-窗口控件

[复制链接]
baiyongbin2009 发布时间:2015-3-13 11:51
特别说明:完整STemWin的1-60期教程和配套实例下载地址:链接
2 t3 a( M7 ]& {8 U/ N
第57章 WINDOW-窗口控件

8 o) J$ f0 s. N1 M' C
   本期教程讲解STemWin支持的窗口控件,窗口控件和前面讲的窗口本质上面是一样的,只不过这里是以控件的形式存在,专门用于对话框中创建窗口。
    57. 1窗口控件介绍
    57. 2 官方WIDGET_Window实例
    57. 3 总结

( l2 X- [* f9 W' ^$ Q; M57.1 窗口控件介绍
    WINDOW控件的作用是从资源表创建对话框窗口。如果对话框看起来不象框架窗口,则应当使用WINDOW控件。窗口控件充当的是背景以及子窗口的容器:它可包含子窗口,通常采用灰色来作为背景的填充色。它类似于没有框架和标题栏的框架窗口,供对话框所使用。
57.2 官方WIDGET_Window实例
    官方的这个实例很好的演示了window的使用,这个例子在模拟器中的位置:
57.1.png
源码如下(程序中进行了详细的注释):
  1. #include "GUI.h"$ o( }! k* N$ b
  2. #include "DIALOG.h"4 q$ Y* P0 @/ C. h
  3. 0 d! J9 ?; L) e. ?' R5 L

  4. ) G* Z8 f6 z  M8 h& l* l
  5. /*********************************************************************3 C2 U' j0 B" Q% p
  6. *# p1 C( K: o' n: J" v
  7. *       _aDialog: e% V7 V0 P/ J9 L2 k
  8. *   对话框创建资源7 f, D. D3 J  }0 h' r' Y5 Q: U
  9. */
    - r% n2 z! B( M0 U: w
  10. static const GUI_WIDGET_CREATE_INFO _aDialog[] = {6 N! \4 J: W. R, J# v% F
  11.   { WINDOW_CreateIndirect, "",       0,               0,  0,   260, 200, 0               },
    " w+ \  X8 a6 d, X; J( S
  12.   { TEXT_CreateIndirect,   "Dialog", 0,               80, 5,   100, 20,  TEXT_CF_HCENTER },5 a* |' Q4 f% ~+ E8 P6 r
  13.   { BUTTON_CreateIndirect, "Close",  GUI_ID_BUTTON0,  80, 160, 100, 20,  0               }2 i; ^0 l* G1 x* d  T6 a4 H
  14. };
    # x2 \6 {4 U) J4 A  ^& n7 X- N
  15. ' e+ q$ C, E0 @: [# @- w) [
  16. /*********************************************************************
    ' A( e. n3 x# k0 u$ j
  17. *
    5 D/ x% J# M: g) F( y1 q
  18. *       _cbDialog% ^4 A6 B( m. X1 @7 [# Y
  19. *    对话框回调函数
    ( M6 P  M: s  c# G8 N8 D% ^) t0 B
  20. */
    0 @) c' C: g4 @2 g- J0 t/ c
  21. static void _cbDialog(WM_MESSAGE *pMsg) {3 F$ a$ C! F- P0 o3 ]
  22.   int NCode;( _0 q# s- u) ^* `
  23.   int Id;) \9 _" v3 B: D
  24. 5 ~1 L3 j/ m# Z( W* [
  25.   switch (pMsg->MsgId) {
    , D6 w6 J) D/ D; _* a
  26.   case WM_PAINT:
    1 W* s0 P; u' ~' h8 M1 k
  27.     GUI_SetBkColor(GUI_GREEN);% M: P% t' u3 n
  28.     GUI_Clear();
    ( X" }3 u' m9 x4 c! i+ d
  29.     break;
    # t; }, L1 Z; v/ i* y. B2 C6 p
  30.   case WM_NOTIFY_PARENT:% K5 d5 {  F3 M
  31.     Id    = WM_GetId(pMsg->hWinSrc);    // Id of widget
    ! ^' b; Q& r1 ?5 @7 ~
  32.     NCode = pMsg->Data.v;               // Notification code9 @% u; K( |" [1 B6 L' j
  33.     switch (NCode) {
    ' o8 H$ b* O3 V# {1 u
  34.     case WM_NOTIFICATION_RELEASED:      // React only if released, t; a( j5 A# C$ b; D- Q
  35.       switch (Id) {
    " ]5 s& O, n# W! @
  36.       case GUI_ID_BUTTON0:8 }4 s6 U  [8 `* n+ h- C
  37.         GUI_EndDialog(pMsg->hWin, 0);
    + u- I" ?3 l! H2 I$ `) q( f  ]
  38.         break;
    6 z" f8 |  ^2 D" k$ H
  39.       }
    - U& a  k+ D& ]0 E; I
  40.       break;6 i6 O" U3 R8 F
  41.     }
    " [/ R+ n/ e7 T6 D3 G6 ]
  42.     break;+ N! K  [, _% K* v5 c4 V2 N3 Q
  43.   default:3 B& ^' U" n) N0 A4 ^! ?+ h
  44.     WM_DefaultProc(pMsg);
    ! u9 r- @, s' d. a
  45.   }7 S* q% y3 v5 F+ [2 e  z. L
  46. }8 k  G  p3 `6 j0 M+ ]

  47. 0 `/ n0 ]4 i" G/ x9 }0 i1 x, s
  48. /*********************************************************************' U. `( Y% Q$ k1 |8 K
  49. *
    6 K0 V1 N2 `4 P
  50. *       MainTask* V5 n; w  |" ]( C1 T3 b
  51. */
    1 [4 `& f+ a0 _/ U
  52. void MainTask(void) {
    5 I" G) s; Z- X. T
  53.   GUI_Init();
    5 v1 k; M. G  W. u) Y
  54.   while(1) {
    " m9 O6 d" A5 w5 q
  55.     GUI_DispStringHCenterAt("WIDGET_Window sample\nshows how to use a WINDOW widget", 160, 5);+ R! c1 e# _/ O/ g
  56. /* 阻塞式对话框 */
    0 u2 k$ X5 [! J0 }+ x+ \
  57.     GUI_ExecDialogBox(_aDialog, GUI_COUNTOF(_aDialog), _cbDialog, WM_HBKWIN, 30, 30);- U% J: `, Q1 l6 M
  58.     GUI_Clear();
    7 Y. O: {  N& g) e; s
  59.     GUI_DispStringHCenterAt("Dialog has been closed", 160, 5);4 w4 H7 E8 b% ^+ @  [, T$ l
  60.     GUI_Delay(1000);
    9 I; A) _4 H& I- H) [
  61.     GUI_Clear();
    3 Q# O- F4 D6 A1 |/ v1 S  f
  62.   }
    9 i: C/ Q. j1 S* T" T4 A' P* M5 ~
  63. }
复制代码
实际显示效果如下:
57.2.png
57.3 总结
    本期教程主要是跟大家讲解了窗口控件的使用,窗口控件使用同上期讲的文本控件一样,都比较的容易些,只是现在的uCGUIBulder4.0和GUIBulder5.22都还不支持在对话框上面创建窗口控件。
; g& d9 }8 I6 L1 x3 d" c
赞 收藏 评论3 发布时间:2015-3-13 11:51

举报

3个回答
大浪10010 回答时间:2015-3-13 20:12:32
学习了,,,,,,
kqh1120 回答时间:2015-3-13 21:15:57
谢谢分享! 14.gif
_ilikerome_ 回答时间:2015-3-14 08:49:57
谢谢,学习了。。
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版