第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的使用,这个例子在模拟器中的位置:
源码如下(程序中进行了详细的注释):
- ----------------------------------------------------------------------
- File : DIALOG_MessageBox.c
- Purpose : Example demonstrating GUI_MessageBox
- Requirements: WindowManager - (x)
- MemoryDevices - (x)
- AntiAliasing - ( )
- VNC-Server - ( )
- PNG-Library - ( )
- TrueTypeFonts - ( )
- ----------------------------------------------------------------------
- */
-
- #include "GUI.h"
- #include "WM.h"
-
- /*******************************************************************
- *
- * Static code
- *
- ********************************************************************
- */
- /*********************************************************************
- *
- * _cbBkWindow
- * 桌面窗口的回调函数
- */
- static void _cbBkWindow(WM_MESSAGE* pMsg) {
- switch (pMsg->MsgId) {
- case WM_PAINT:
- GUI_SetBkColor(GUI_RED);
- GUI_Clear();
- GUI_SetColor(GUI_WHITE);
- GUI_SetFont(&GUI_Font24_ASCII);
- GUI_DispStringHCenterAt("DIALOG_MessageBox - Sample", 160, 5);
- break;
- default:
- WM_DefaultProc(pMsg);
- }
- }
-
- /*********************************************************************
- *
- * Public code
- *
- **********************************************************************
- */
- /*********************************************************************
- *
- * MainTask
- */
- void MainTask(void) {
- GUI_Init();
-
- /* 开启窗口使用内存设备 */
- #if GUI_SUPPORT_MEMDEV
- WM_SetCreateFlags(WM_CF_MEMDEV);
- #endif
- /* 设置桌面窗口的回调函数 */
- WM_SetCallback(WM_HBKWIN, &_cbBkWindow);
-
- //
- // 创建消息框,等待直到他被关闭
- //
- while (1) {
- GUI_MessageBox("This text is shown\nin a message box",
- "Caption/Title", GUI_MESSAGEBOX_CF_MOVEABLE);
- GUI_Delay(750); // 延迟一段时间
- GUI_MessageBox("New message !",
- "Caption/Title", GUI_MESSAGEBOX_CF_MOVEABLE);
- GUI_Delay(750);
- }
- }
实际显示效果如下:
49.3 官方DIALOG_MessageBoxUser实例
官方的这个实例很好的演示了MessageBox的使用,这个例子在模拟器中的位置:
源码如下(程序中进行了详细的注释):
- /*********************************************************************
- *
- * Static code
- *
- **********************************************************************
- */
- /*********************************************************************
- *
- * _CreateMessageBox
- */
- static WM_HWIN _CreateMessageBox(const char * sMessage, const char * sCaption, int Flags, const GUI_FONT * pFont) {
- WM_HWIN hWin;
- WM_HWIN hItem;
- GUI_RECT Rect;
-
- hWin = MESSAGEBOX_Create(sMessage, sCaption, Flags);
- //
- // 设置消息框中标题的字体,消息框本质上也是框架窗口,所以这里可以直接的调用修改
- //
- FRAMEWIN_SetFont(hWin, pFont);
- //
- // 调整大小
- //
- WM_GetWindowRectEx(hWin, &Rect);
- WM_SetWindowPos(hWin, Rect.x0 - 15,
- Rect.y0 - 15,
- Rect.x1 - Rect.x0 + 1 + 30,
- Rect.y1 - Rect.y0 + 1 + 30);
- //
- // 设置按钮控件的字体
- //
- hItem = WM_GetDialogItem(hWin, GUI_ID_OK);
- BUTTON_SetFont(hItem, pFont);
- //
- // 调节按钮控件的大小
- //
- WM_GetWindowRectEx(hItem, &Rect);
- WM_SetWindowPos(hItem, Rect.x0,
- Rect.y0 + 10,
- Rect.x1 - Rect.x0 + 1 + 30,
- Rect.y1 - Rect.y0 + 1 + 5);
- //
- // 设置文本控件的字体
- //
- hItem = WM_GetDialogItem(hWin, GUI_ID_TEXT0);
- TEXT_SetFont(hItem, pFont);
- //
- // 调节文本控件的大小
- //
- WM_GetWindowRectEx(hItem, &Rect);
- WM_SetWindowPos(hItem, Rect.x0,
- Rect.y0,
- Rect.x1 - Rect.x0 + 1 + 30,
- Rect.y1 - Rect.y0 + 1 + 12);
- return hWin;
- }
-
- /*********************************************************************
- *
- * _EnableSkinning
- */
- static void _EnableSkinning(void) {
- FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);
- BUTTON_SetDefaultSkin (BUTTON_SKIN_FLEX);
- }
-
- /*********************************************************************
- *
- * Public code
- *
- **********************************************************************
- */
- /*********************************************************************
- *
- * MainTask
- */
- void MainTask(void) {
- GUI_Init();
- /* 使能皮肤 */
- _EnableSkinning();
- while (1) {
- GUI_SetFont(&GUI_Font20B_ASCII);
- GUI_DispStringHCenterAt("Applicatoin defined MESSAGEBOX", 160, 5);
- /* 执行已经创建的对话框 */
- GUI_ExecCreatedDialog(_CreateMessageBox("Message", "Caption", 0, &GUI_Font24));
- GUI_Clear();
- GUI_Delay(1000);
- }
- }
实际显示效果如下:
49.4 总结
本期教程主要是跟大家讲解了消息框的两种创建方法,一种是系统自带的,直接调用即可显示,也就是本期教程中的第一个例子。另一种是用户的创建方式,这种模式下用户可以自定义在消息框中要显示的内容。
对论坛没啥贡献啊