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

第49章 MESSAGEBOX-消息框控件

时间:10-02 整理:3721RD 点击:
第49章 MESSAGEBOX-消息框控件

    本期教程讲解STemWin支持的消息框控件。

    49. 1 消息框控件介绍

    49. 2 官方DIALOG_MessageBox实例

    49. 3官方DIALOG_MessageBoxUser实例

    49. 4 总结

49.1 消息框控件介绍

    使用MESSAGEBOX控件可在带有标题栏和 “确定”按钮 (必须按下才能关闭窗口)的框架窗口中显示消息。创建消息框或者创建并执行消息框仅需一行代码。下表显示MESSAGEBOX小工具的外观:



消息控件的使用比较简单,仅有两个相关的API:GUI_MessageBox()和MESSAGEBOX_Create()。


49.2 官方DIALOG_MessageBox实例

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



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

  1. ----------------------------------------------------------------------
  2. File        : DIALOG_MessageBox.c
  3. Purpose     : Example demonstrating GUI_MessageBox
  4. Requirements: WindowManager - (x)
  5.               MemoryDevices - (x)
  6.               AntiAliasing  - ( )
  7.               VNC-Server    - ( )
  8.               PNG-Library   - ( )
  9.               TrueTypeFonts - ( )
  10. ----------------------------------------------------------------------
  11. */

  12. #include "GUI.h"
  13. #include "WM.h"

  14. /*******************************************************************
  15. *
  16. *       Static code
  17. *
  18. ********************************************************************
  19. */
  20. /*********************************************************************
  21. *
  22. *       _cbBkWindow
  23. *    桌面窗口的回调函数
  24. */
  25. static void _cbBkWindow(WM_MESSAGE* pMsg) {
  26.   switch (pMsg->MsgId) {
  27.   case WM_PAINT:
  28.     GUI_SetBkColor(GUI_RED);
  29.     GUI_Clear();
  30.     GUI_SetColor(GUI_WHITE);
  31.     GUI_SetFont(&GUI_Font24_ASCII);
  32.     GUI_DispStringHCenterAt("DIALOG_MessageBox - Sample", 160, 5);
  33.     break;
  34.   default:
  35.     WM_DefaultProc(pMsg);
  36.   }
  37. }

  38. /*********************************************************************
  39. *
  40. *       Public code
  41. *
  42. **********************************************************************
  43. */
  44. /*********************************************************************
  45. *
  46. *       MainTask
  47. */
  48. void MainTask(void) {
  49.   GUI_Init();

  50.   /* 开启窗口使用内存设备 */
  51.   #if GUI_SUPPORT_MEMDEV
  52.     WM_SetCreateFlags(WM_CF_MEMDEV);
  53.   #endif
  54.   /* 设置桌面窗口的回调函数 */
  55.   WM_SetCallback(WM_HBKWIN, &_cbBkWindow);

  56.   //
  57.   // 创建消息框,等待直到他被关闭
  58.   //
  59.   while (1) {
  60.     GUI_MessageBox("This text is shown\nin a message box",
  61. "Caption/Title", GUI_MESSAGEBOX_CF_MOVEABLE);
  62.     GUI_Delay(750);                    // 延迟一段时间
  63.     GUI_MessageBox("New message !",
  64. "Caption/Title", GUI_MESSAGEBOX_CF_MOVEABLE);
  65.     GUI_Delay(750);
  66.   }
  67. }

复制代码

实际显示效果如下:




49.3  官方DIALOG_MessageBoxUser实例

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



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

  1. /*********************************************************************
  2. *
  3. *       Static code
  4. *
  5. **********************************************************************
  6. */
  7. /*********************************************************************
  8. *
  9. *       _CreateMessageBox
  10. */
  11. static WM_HWIN _CreateMessageBox(const char * sMessage, const char * sCaption, int Flags, const GUI_FONT * pFont) {
  12.   WM_HWIN  hWin;
  13.   WM_HWIN  hItem;
  14.   GUI_RECT Rect;

  15.   hWin = MESSAGEBOX_Create(sMessage, sCaption, Flags);
  16.   //
  17.   // 设置消息框中标题的字体,消息框本质上也是框架窗口,所以这里可以直接的调用修改
  18.   //
  19.   FRAMEWIN_SetFont(hWin, pFont);
  20.   //
  21.   // 调整大小
  22.   //
  23.   WM_GetWindowRectEx(hWin, &Rect);
  24.   WM_SetWindowPos(hWin, Rect.x0 - 15,
  25.                         Rect.y0 - 15,
  26.                         Rect.x1 - Rect.x0 + 1 + 30,
  27.                         Rect.y1 - Rect.y0 + 1 + 30);
  28.   //
  29.   // 设置按钮控件的字体
  30.   //
  31.   hItem = WM_GetDialogItem(hWin, GUI_ID_OK);
  32.   BUTTON_SetFont(hItem, pFont);
  33.   //
  34.   // 调节按钮控件的大小
  35.   //
  36.   WM_GetWindowRectEx(hItem, &Rect);
  37.   WM_SetWindowPos(hItem, Rect.x0,
  38.                          Rect.y0 + 10,
  39.                          Rect.x1 - Rect.x0 + 1 + 30,
  40.                          Rect.y1 - Rect.y0 + 1 +  5);
  41.   //
  42.   // 设置文本控件的字体
  43.   //
  44.   hItem = WM_GetDialogItem(hWin, GUI_ID_TEXT0);
  45.   TEXT_SetFont(hItem, pFont);
  46.   //
  47.   // 调节文本控件的大小
  48.   //
  49.   WM_GetWindowRectEx(hItem, &Rect);
  50.   WM_SetWindowPos(hItem, Rect.x0,
  51.                          Rect.y0,
  52.                          Rect.x1 - Rect.x0 + 1 + 30,
  53.                          Rect.y1 - Rect.y0 + 1 + 12);
  54.   return hWin;
  55. }

  56. /*********************************************************************
  57. *
  58. *       _EnableSkinning
  59. */
  60. static void _EnableSkinning(void) {
  61.   FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);
  62.   BUTTON_SetDefaultSkin  (BUTTON_SKIN_FLEX);
  63. }

  64. /*********************************************************************
  65. *
  66. *       Public code
  67. *
  68. **********************************************************************
  69. */
  70. /*********************************************************************
  71. *
  72. *       MainTask
  73. */
  74. void MainTask(void) {
  75.   GUI_Init();
  76.   /* 使能皮肤 */
  77.   _EnableSkinning();
  78.   while (1) {
  79.     GUI_SetFont(&GUI_Font20B_ASCII);
  80.     GUI_DispStringHCenterAt("Applicatoin defined MESSAGEBOX", 160, 5);
  81. /* 执行已经创建的对话框 */
  82.     GUI_ExecCreatedDialog(_CreateMessageBox("Message", "Caption", 0, &GUI_Font24));
  83.     GUI_Clear();
  84.     GUI_Delay(1000);
  85.   }
  86. }

复制代码

实际显示效果如下:



49.4  总结

    本期教程主要是跟大家讲解了消息框的两种创建方法,一种是系统自带的,直接调用即可显示,也就是本期教程中的第一个例子。另一种是用户的创建方式,这种模式下用户可以自定义在消息框中要显示的内容。


对论坛没啥贡献啊

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

网站地图

Top