[ucgui] 对话框4——模式消息窗口

简介:


 

>_<" 这里实现点击灰色窗口的按钮出现一个模式消息窗口,点击OK之后才能再聚焦到灰窗口;点击灰窗口除了按钮的地方,弹出一个非模式窗口。

复制代码
 1 static const GUI_WIDGET_CREATE_INFO _aDialogOrder[] = {//大的一个窗口(刚开始显示的,有一个按钮)
 2   { FRAMEWIN_CreateIndirect, "Order vehicle",   0,                 20,  50, 480, 360, 0 },
 3   { BUTTON_CreateIndirect,   "Select vehicle",  GUI_ID_BUTTON0,     6, 113, 100,  20, 0 },
 4 };
 5 
 6 static void _cbDialogOrder(WM_MESSAGE* pMsg) {//消息窗口回调函数
 7   WM_HWIN hDlg, hWin = pMsg->hWin;
 8   GUI_PID_STATE* State;
 9 
10   switch (pMsg->MsgId) {
11   case WM_INIT_DIALOG:
12     break;
13   case WM_NOTIFY_PARENT:
14     if (pMsg->Data.v == WM_NOTIFICATION_RELEASED) {//此通知消息将在被点击的小工具已被释放时发送
15       int Id = WM_GetId(pMsg->hWinSrc);
16       switch (Id) {
17       case GUI_ID_BUTTON0:       
18           //调用函数生成MessageBox,可以通过拖动标题栏或窗口框来移动消息框
19         hDlg = MESSAGEBOX_Create("   Computer Win!!!   ", "Failed", GUI_MESSAGEBOX_CF_MOVEABLE);  
20         //控制窗口聚焦直至窗口结束的相关设置[如果去掉就无法实现模式窗口的效果
21         WM_MakeModal(hDlg);    /*此函数使窗口在“模态”模式下作业。这意味着指针设备输入将仅发送到“模态”窗口,
22                               或者如果输入位置在模态窗口的矩形内则仅发送到其子窗口。*/
23         WM_SetFocus(hDlg);    //将输入焦点设置到指定窗口
24         WM_InvalidateWindow(hDlg);//使窗口无效
25         break;
26       }
27     }
28     break;
29   case WM_TOUCH:
30         State = (GUI_PID_STATE*) pMsg->Data.p;
31         if(State && !State->Pressed)
32         {
33             {
34                 hDlg = MESSAGEBOX_Create("   You Win!!!   ", "Win", GUI_MESSAGEBOX_CF_MOVEABLE);
35                 //这里把控制模式窗口的注释掉,点击其他区域建立一个非模式窗口
36                 //WM_MakeModal(hDlg);
37                 //WM_SetFocus(hDlg);
38                 //WM_InvalidateWindow(hDlg);
39                 break;
40             }
41         }
42   default:
43     WM_DefaultProc(pMsg);
44   }
45 }
46 
47 static void _cbBkWindow(WM_MESSAGE* pMsg) {//背景窗口回调函数
48   switch (pMsg->MsgId) {
49   case WM_PAINT:
50     GUI_SetBkColor(0x008000);
51     GUI_SetColor(GUI_WHITE);
52     GUI_SetFont(&GUI_Font24_ASCII);
53     GUI_Clear();
54     GUI_DispStringHCenterAt("DIALOG_NestedModal - Sample", 160, 10);
55   default:
56     WM_DefaultProc(pMsg);
57   }
58 }
59 
60 void Fun(void) {
61     WM_HWIN hWin;                       //句柄
62     GUI_Init();                         //初始化
63     GUI_CURSOR_Show();                 //鼠标指针显示
64 /*
65 窗口管理器的默认特性是向每个需要重绘的窗口发送一条WM_PAINT。这会导致闪变效应。为抑制这些
66 每个窗口的闪变效应,可为重绘操作自动使用存储设备。方法为,在创建窗口时设置标记WM_CF_MEMDEV、
67 使用函数WM_SetCreateFlags()设置默认创建标记,或使用函数WM_EnableMemdev()。WM然后
68 会将WM_PAINT消息输出重定向到存储设备中,再复制到显示器中。如果整个窗口的内存不够,会自动
69 使用分段。存储设备只是临时使用,在绘制操作完成后会移除。
70 */
71     WM_SetCreateFlags(WM_CF_MEMDEV);                       //设置在创建新窗口时用作默认的标记
72     WM_EnableMemdev(WM_HBKWIN);                              //启用使用存储设备来重绘窗口
73     WM_SetCallback(WM_HBKWIN, &_cbBkWindow);             //设置窗口的回调例程,然后调用WM_PAINT消息初始化背景
74     //创建非阻塞式对话框
75     hWin = GUI_CreateDialogBox(_aDialogOrder, GUI_COUNTOF(_aDialogOrder), &_cbDialogOrder, WM_HBKWIN, 0, 0);  
76     while (1){
77         if (!GUI_Exec()){
78           GUI_X_WAIT_EVENT();      /* Wait for event (keyboard, mouse or whatever) */
79         }
80     }
81 }
复制代码
相关文章
|
4月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 消息对话框QMessageBox
【Qt 学习笔记】Qt窗口 | 标准对话框 | 消息对话框QMessageBox
654 4
【Qt 学习笔记】Qt窗口 | 标准对话框 | 消息对话框QMessageBox
|
4月前
qml使用消息对话框
qml使用消息对话框
32 0
|
7月前
QT取消标题栏,如何实现窗口移动
QT取消标题栏,如何实现窗口移动
win11取消右键菜单折叠恢复经典传统菜单模式方法解决
win11取消右键菜单折叠恢复经典传统菜单模式方法解决
507 0
|
C# Windows
推荐一个C#开发的窗口扩展菜单,支持系统所有窗口
一个C#开发的窗口扩展项目,采用.NET Framework 4.0开发,支持Windows Xp以及更高版本的系统,同时支持命令模式,可供代码调用。
127 0
推荐一个C#开发的窗口扩展菜单,支持系统所有窗口
|
容器
对话框和窗口的区别
“窗口”与“对话框”有什么区别?                       计算机类稿件的一大特点是文中的图很多。在这大量的图中,系统软件或应用软件的“界面”、“窗口”、“对话框”、“提示框”等的截图又占了很大的比例。
4623 0
|
Windows
Win系统 - 系统双击文件总弹出属性窗口如何解决?
Win系统 - 系统双击文件总弹出属性窗口如何解决?
311 0
Win系统 - 系统双击文件总弹出属性窗口如何解决?
Qt实用技巧:将QWidget作为输入窗口,接收键盘消息、输入法并且控制输入法悬浮工具栏位置控制
Qt实用技巧:将QWidget作为输入窗口,接收键盘消息、输入法并且控制输入法悬浮工具栏位置控制
QT应用编程: QGraphicsTextItem单击选中、双击进入编辑状态
QT应用编程: QGraphicsTextItem单击选中、双击进入编辑状态
651 0
QT应用编程: QGraphicsTextItem单击选中、双击进入编辑状态
|
安全 C#
WPF的消息机制(三)- WPF内部的5个窗口之处理激活和关闭的消息窗口以及系统资源通知窗口
原文:WPF的消息机制(三)- WPF内部的5个窗口之处理激活和关闭的消息窗口以及系统资源通知窗口 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.
1040 0