微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 第57章 WINDOW-窗口控件

第57章 WINDOW-窗口控件

时间:10-02 整理:3721RD 点击:
第57章       WINDOW-窗口控件

    本期教程讲解STemWin支持的窗口控件,窗口控件和前面讲的窗口本质上面是一样的,只不过这里是以控件的形式存在,专门用于对话框中创建窗口。

    57. 1窗口控件介绍

    57. 2 官方WIDGET_Window实例

    57. 3 总结

57.1  窗口控件介绍

    WINDOW控件的作用是从资源表创建对话框窗口。如果对话框看起来不象框架窗口,则应当使用WINDOW控件。窗口控件充当的是背景以及子窗口的容器:它可包含子窗口,通常采用灰色来作为背景的填充色。它类似于没有框架和标题栏的框架窗口,供对话框所使用。


57.2  官方WIDGET_Window实例

    官方的这个实例很好的演示了window的使用,这个例子在模拟器中的位置:




源码如下(程序中进行了详细的注释):

  1. #include "GUI.h"
  2. #include "DIALOG.h"


  3. /*********************************************************************
  4. *
  5. *       _aDialog
  6. *   对话框创建资源
  7. */
  8. static const GUI_WIDGET_CREATE_INFO _aDialog[] = {
  9.   { WINDOW_CreateIndirect, "",       0,               0,  0,   260, 200, 0               },
  10.   { TEXT_CreateIndirect,   "Dialog", 0,               80, 5,   100, 20,  TEXT_CF_HCENTER },
  11.   { BUTTON_CreateIndirect, "Close",  GUI_ID_BUTTON0,  80, 160, 100, 20,  0               }
  12. };

  13. /*********************************************************************
  14. *
  15. *       _cbDialog
  16. *    对话框回调函数
  17. */
  18. static void _cbDialog(WM_MESSAGE *pMsg) {
  19.   int NCode;
  20.   int Id;

  21.   switch (pMsg->MsgId) {
  22.   case WM_PAINT:
  23.     GUI_SetBkColor(GUI_GREEN);
  24.     GUI_Clear();
  25.     break;
  26.   case WM_NOTIFY_PARENT:
  27.     Id    = WM_GetId(pMsg->hWinSrc);    // Id of widget
  28.     NCode = pMsg->Data.v;               // Notification code
  29.     switch (NCode) {
  30.     case WM_NOTIFICATION_RELEASED:      // React only if released
  31.       switch (Id) {
  32.       case GUI_ID_BUTTON0:
  33.         GUI_EndDialog(pMsg->hWin, 0);
  34.         break;
  35.       }
  36.       break;
  37.     }
  38.     break;
  39.   default:
  40.     WM_DefaultProc(pMsg);
  41.   }
  42. }

  43. /*********************************************************************
  44. *
  45. *       MainTask
  46. */
  47. void MainTask(void) {
  48.   GUI_Init();
  49.   while(1) {
  50.     GUI_DispStringHCenterAt("WIDGET_Window sample\nshows how to use a WINDOW widget", 160, 5);
  51.      /* 阻塞式对话框 */
  52.     GUI_ExecDialogBox(_aDialog, GUI_COUNTOF(_aDialog), _cbDialog, WM_HBKWIN, 30, 30);
  53.     GUI_Clear();
  54.     GUI_DispStringHCenterAt("Dialog has been closed", 160, 5);
  55.     GUI_Delay(1000);
  56.     GUI_Clear();
  57.   }
  58. }

复制代码

实际显示效果如下:




57.3  总结

    本期教程主要是跟大家讲解了窗口控件的使用,窗口控件使用同上期讲的文本控件一样,都比较的容易些,只是现在的uCGUIBulder4.0和GUIBulder5.22都还不支持在对话框上面创建窗口控件。


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top