|
特别说明:完整STemWin的1-60期教程和配套实例下载地址:链接
第57章 WINDOW-窗口控件
本期教程讲解STemWin支持的窗口控件,窗口控件和前面讲的窗口本质上面是一样的,只不过这里是以控件的形式存在,专门用于对话框中创建窗口。
57. 1窗口控件介绍
57. 2 官方WIDGET_Window实例
57. 3 总结
57.1 窗口控件介绍
WINDOW控件的作用是从资源表创建对话框窗口。如果对话框看起来不象框架窗口,则应当使用WINDOW控件。窗口控件充当的是背景以及子窗口的容器:它可包含子窗口,通常采用灰色来作为背景的填充色。它类似于没有框架和标题栏的框架窗口,供对话框所使用。
57.2 官方WIDGET_Window实例
官方的这个实例很好的演示了window的使用,这个例子在模拟器中的位置:
源码如下(程序中进行了详细的注释):
- #include "GUI.h"
- #include "DIALOG.h"
- /*********************************************************************
- *
- * _aDialog
- * 对话框创建资源
- */
- static const GUI_WIDGET_CREATE_INFO _aDialog[] = {
- { WINDOW_CreateIndirect, "", 0, 0, 0, 260, 200, 0 },
- { TEXT_CreateIndirect, "Dialog", 0, 80, 5, 100, 20, TEXT_CF_HCENTER },
- { BUTTON_CreateIndirect, "Close", GUI_ID_BUTTON0, 80, 160, 100, 20, 0 }
- };
- /*********************************************************************
- *
- * _cbDialog
- * 对话框回调函数
- */
- static void _cbDialog(WM_MESSAGE *pMsg) {
- int NCode;
- int Id;
- switch (pMsg->MsgId) {
- case WM_PAINT:
- GUI_SetBkColor(GUI_GREEN);
- GUI_Clear();
- break;
- case WM_NOTIFY_PARENT:
- Id = WM_GetId(pMsg->hWinSrc); // Id of widget
- NCode = pMsg->Data.v; // Notification code
- switch (NCode) {
- case WM_NOTIFICATION_RELEASED: // React only if released
- switch (Id) {
- case GUI_ID_BUTTON0:
- GUI_EndDialog(pMsg->hWin, 0);
- break;
- }
- break;
- }
- break;
- default:
- WM_DefaultProc(pMsg);
- }
- }
- /*********************************************************************
- *
- * MainTask
- */
- void MainTask(void) {
- GUI_Init();
- while(1) {
- GUI_DispStringHCenterAt("WIDGET_Window sample\nshows how to use a WINDOW widget", 160, 5);
- /* 阻塞式对话框 */
- GUI_ExecDialogBox(_aDialog, GUI_COUNTOF(_aDialog), _cbDialog, WM_HBKWIN, 30, 30);
- GUI_Clear();
- GUI_DispStringHCenterAt("Dialog has been closed", 160, 5);
- GUI_Delay(1000);
- GUI_Clear();
- }
- }
复制代码 实际显示效果如下:
57.3 总结
本期教程主要是跟大家讲解了窗口控件的使用,窗口控件使用同上期讲的文本控件一样,都比较的容易些,只是现在的uCGUIBulder4.0和GUIBulder5.22都还不支持在对话框上面创建窗口控件。 |
|