[ucgui] 对话框7——按钮触发与模式窗口

>_<" 模式窗口,只有结束该窗口时才能聚焦到其他的窗口上~

  1 //////////////////////////////////////////////////////////////////////
  2 //全局函数
  3 //////////////////////////////////////////////////////////////////////
  4 static void _cbDialog0(WM_MESSAGE * pMsg);
  5 static void _cbDialog1(WM_MESSAGE * pMsg);
  6 static void _cbDialog2(WM_MESSAGE * pMsg);
  7 //////////////////////////////////////////////////////////////////////
  8 //变量
  9 //////////////////////////////////////////////////////////////////////
 10 WM_HWIN hWin_p,hWin_c_AdjZero,hWin_c_AdjValue;
 11 //////////////////////////////////////////////////////////////////////
 12 //宏定义
 13 //窗口0:是主界面窗口
 14 //窗口1:是调零窗口
 15 //窗口2:是校准窗口
 16 //命名规则:P表示父窗口,C表示子窗口;
 17 //当存在同一级的相同控件时要在后面加上各自的名字区分
 18 //ID_控件类型_父窗口还是子窗口_一级区分_二级区分...
 19 //////////////////////////////////////////////////////////////////////
 20 #define ID_FRAMEWIN_P              (GUI_ID_USER + 0x0E)
 21 #define ID_BUTTON_P_AdjZero       (GUI_ID_USER + 0x18)
 22 #define ID_BUTTON_P_AdjValue       (GUI_ID_USER + 0x19)
 23
 24 #define ID_FRAMEWIN_C_AdjZero   (GUI_ID_USER + 0x21)
 25 #define ID_BUTTON_C_AdjZero       (GUI_ID_USER + 0x22)
 26 #define ID_TEXT_C_AdjZero       (GUI_ID_USER + 0x25)
 27 #define ID_MULTIEDIT_C_AdjZero  (GUI_ID_USER + 0x26)
 28
 29 #define ID_FRAMEWIN_C_AdjValue  (GUI_ID_USER + 0x27)
 30 #define ID_BUTTON_C_AdjValue      (GUI_ID_USER + 0x28)
 31 #define ID_MULTIEDIT_C_AdjValue (GUI_ID_USER + 0x29)
 32 #define ID_SLIDER_C_AdjValue      (GUI_ID_USER + 0x30)
 33 #define ID_TEXT_C_AdjValue      (GUI_ID_USER + 0x31)
 34 #define ID_EDIT_C_AdjValue      (GUI_ID_USER + 0x35)
 35 //////////////////////////////////////////////////////////////////////
 36 //资源列表
 37 //窗口0:是主界面窗口
 38 //窗口1:是调零窗口
 39 //窗口2:是校准窗口
 40 //////////////////////////////////////////////////////////////////////
 41 static const GUI_WIDGET_CREATE_INFO _aDialogCreate0[] = {
 42   { FRAMEWIN_CreateIndirect, "Framewin",ID_FRAMEWIN_P , 0, -1, 800, 480, 0, 0 },
 43   { BUTTON_CreateIndirect, "ZERO", ID_BUTTON_P_AdjZero, 725, 344, 60, 55, 0, 0 },
 44   { BUTTON_CreateIndirect, "VALUE",ID_BUTTON_P_AdjValue, 725, 404, 60, 55, 0, 0},
 45 };
 46 static const GUI_WIDGET_CREATE_INFO _aDialogCreate1[] = {
 47   { FRAMEWIN_CreateIndirect, "Adjust Zero",ID_FRAMEWIN_C_AdjZero, 250, 155, 225, 193, 0, 0},
 48   { BUTTON_CreateIndirect, "Button",ID_BUTTON_C_AdjZero, 153, 16, 50, 45, 0, 0},
 49   { TEXT_CreateIndirect, "Text",ID_TEXT_C_AdjZero, 29, 28, 102, 28, 0, 100},
 50   { MULTIEDIT_CreateIndirect, "Multiedit",ID_MULTIEDIT_C_AdjZero, 4, 88, 207, 81, 0, 0},
 51 };
 52 static const GUI_WIDGET_CREATE_INFO _aDialogCreate2[] = {
 53   { FRAMEWIN_CreateIndirect, "Adjust Value",ID_FRAMEWIN_C_AdjValue, 250, 154, 225, 193, 0, 0},
 54   { BUTTON_CreateIndirect, "Button",ID_BUTTON_C_AdjValue, 172, 8, 40, 39, 0, 0},
 55   { MULTIEDIT_CreateIndirect, "Multiedit",ID_MULTIEDIT_C_AdjValue, 4, 88, 207, 81, 0, 0},
 56   { SLIDER_CreateIndirect, "Slider",ID_SLIDER_C_AdjValue, 2, 61, 178, 20, 0, 0},
 57   { TEXT_CreateIndirect, "Text",ID_TEXT_C_AdjValue, 10, 20, 80, 20, 0, 100},
 58   { EDIT_CreateIndirect, "Edit",ID_EDIT_C_AdjValue, 184, 60, 26, 20, 0, 100},
 59 };
 60 //////////////////////////////////////////////////////////////////////
 61 //回调函数
 62 //窗口0:是主界面窗口
 63 //窗口1:是调零窗口
 64 //窗口2:是校准窗口
 65 //////////////////////////////////////////////////////////////////////
 66 static void _cbDialog0(WM_MESSAGE * pMsg) {
 67   WM_HWIN hItem;
 68   int Id, NCode;
 69   // USER START (Optionally insert additional variables)
 70   // USER END
 71
 72   switch (pMsg->MsgId) {
 73   case WM_INIT_DIALOG://初始化建立2个非阻塞的基于主窗口的子窗口
 74       break;
 75   case WM_NOTIFY_PARENT:
 76     Id    = WM_GetId(pMsg->hWinSrc);
 77     NCode = pMsg->Data.v;
 78     switch(Id) {
 79     case ID_BUTTON_P_AdjZero: // Notifications sent by ‘SET‘
 80       switch(NCode) {
 81       case WM_NOTIFICATION_CLICKED:
 82         break;
 83       case WM_NOTIFICATION_RELEASED:
 84           hWin_c_AdjZero=GUI_CreateDialogBox(_aDialogCreate1, GUI_COUNTOF(_aDialogCreate1),&_cbDialog1, 0, 0, 0);
 85         //模式化并聚焦窗口
 86         WM_MakeModal(hWin_c_AdjZero);/*此函数使窗口在“模态”模式下作业。这意味着指针设备输入
 87                                         将仅发送到“模态”窗口,或者如果输入位置在模态窗口的矩形内则仅发送到其子窗口。*/
 88         WM_SetFocus(hWin_c_AdjZero);    //将输入焦点设置到指定窗口
 89         WM_InvalidateWindow(hWin_c_AdjZero);//使窗口无效
 90         break;
 91       }
 92       break;
 93     case ID_BUTTON_P_AdjValue: // Notifications sent by ‘CHECK‘
 94       switch(NCode) {
 95       case WM_NOTIFICATION_RELEASED:
 96         //模式化并聚焦窗口
 97           hWin_c_AdjValue=GUI_CreateDialogBox(_aDialogCreate2, GUI_COUNTOF(_aDialogCreate2),&_cbDialog2, 0, 0, 0);
 98         WM_MakeModal(hWin_c_AdjValue);/*此函数使窗口在“模态”模式下作业。这意味着指针设备输入
 99                                         将仅发送到“模态”窗口,或者如果输入位置在模态窗口的矩形内则仅发送到其子窗口。*/
100         WM_SetFocus(hWin_c_AdjValue);    //将输入焦点设置到指定窗口
101         WM_InvalidateWindow(hWin_c_AdjValue);//使窗口无效
102         break;
103       }
104       break;
105     }
106     break;
107   default:
108     WM_DefaultProc(pMsg);
109     break;
110   }
111 }
112
113 static void _cbDialog1(WM_MESSAGE * pMsg) {
114   WM_HWIN hItem;
115   int Id, NCode;
116
117   switch (pMsg->MsgId) {
118   case WM_INIT_DIALOG:
119     //
120     // Initialization of ‘Button‘
121     //
122     hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_C_AdjZero);
123     BUTTON_SetText(hItem, "OK");
124     //
125     // Initialization of ‘Text‘
126     //
127     hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_C_AdjZero);
128     TEXT_SetText(hItem, "Adjustment Zero");
129     //
130     // Initialization of ‘Multiedit‘
131     //
132     hItem = WM_GetDialogItem(pMsg->hWin, ID_MULTIEDIT_C_AdjZero);
133     MULTIEDIT_SetText(hItem, "     make the machine zero load,and then click the OK button!");
134     MULTIEDIT_SetReadOnly(hItem,1);
135     MULTIEDIT_SetWrapWord(hItem);
136     // USER START (Optionally insert additional code for further widget initialization)
137     // USER END
138     break;
139   case WM_NOTIFY_PARENT:
140     Id    = WM_GetId(pMsg->hWinSrc);
141     NCode = pMsg->Data.v;
142     switch(Id) {
143     case ID_BUTTON_C_AdjZero: // Notifications sent by ‘Button‘
144       switch(NCode) {
145       case WM_NOTIFICATION_RELEASED:    //释放按钮相应
146         GUI_EndDialog(hWin_c_AdjZero,0);
147         break;
148       }
149       break;
150     case ID_MULTIEDIT_C_AdjZero: // Notifications sent by ‘Multiedit‘
151       switch(NCode) {
152       case WM_NOTIFICATION_CLICKED:
153         break;
154       case WM_NOTIFICATION_RELEASED:
155         break;
156       case WM_NOTIFICATION_VALUE_CHANGED:
157         break;
158       }
159       break;
160     }
161     break;
162   default:
163     WM_DefaultProc(pMsg);
164     break;
165   }
166 }
167
168 static void _cbDialog2(WM_MESSAGE * pMsg) {
169   WM_HWIN hItem;
170   int Id, NCode;
171
172   switch (pMsg->MsgId) {
173   case WM_INIT_DIALOG:
174     //
175     // Initialization of ‘Button‘
176     //
177     hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_C_AdjValue);
178     BUTTON_SetText(hItem, "OK");
179     //
180     // Initialization of ‘Multiedit‘
181     //
182     hItem = WM_GetDialogItem(pMsg->hWin, ID_MULTIEDIT_C_AdjValue);
183     MULTIEDIT_SetText(hItem, "     make the machine load above half measuring range ,and then slide the slider to meet the current percentage, last click the OK button!");
184     MULTIEDIT_SetReadOnly(hItem,1);
185     MULTIEDIT_SetWrapWord(hItem);
186     //
187     // Initialization of ‘Text‘
188     //
189     hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_C_AdjValue);
190     TEXT_SetText(hItem, "Adjust Value");
191     //
192     // Initialization of ‘Edit‘
193     //
194     hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_C_AdjValue);
195     EDIT_SetText(hItem, "123");
196
197     break;
198   case WM_NOTIFY_PARENT:
199     Id    = WM_GetId(pMsg->hWinSrc);
200     NCode = pMsg->Data.v;
201     switch(Id) {
202     case ID_BUTTON_C_AdjValue: // Notifications sent by ‘Button‘
203       switch(NCode) {
204       case WM_NOTIFICATION_RELEASED://释放按钮时相应
205           GUI_EndDialog(hWin_c_AdjValue,0);
206         break;
207       }
208       break;
209     case ID_MULTIEDIT_C_AdjValue: // Notifications sent by ‘Multiedit‘
210       switch(NCode) {
211       case WM_NOTIFICATION_CLICKED:
212         break;
213       case WM_NOTIFICATION_RELEASED:
214         break;
215       case WM_NOTIFICATION_VALUE_CHANGED:
216         break;
217       }
218       break;
219     case ID_SLIDER_C_AdjValue: // Notifications sent by ‘Slider‘
220       switch(NCode) {
221       case WM_NOTIFICATION_CLICKED:
222         break;
223       case WM_NOTIFICATION_RELEASED:
224         break;
225       case WM_NOTIFICATION_VALUE_CHANGED:
226         break;
227       }
228       break;
229     case ID_EDIT_C_AdjValue: // Notifications sent by ‘Edit‘
230       switch(NCode) {
231       case WM_NOTIFICATION_CLICKED:
232         break;
233       case WM_NOTIFICATION_RELEASED:
234         break;
235       case WM_NOTIFICATION_VALUE_CHANGED:
236         break;
237       }
238       break;
239     }
240     break;
241   default:
242     WM_DefaultProc(pMsg);
243     break;
244   }
245 }
246
247 //////////////////////////////////////////////////////////////////////
248 //主函数
249 //////////////////////////////////////////////////////////////////////
250 void Fun(void) {
251     GUI_Init();                    //ucgui初始化
252     GUI_ExecDialogBox(_aDialogCreate0, GUI_COUNTOF(_aDialogCreate0),&_cbDialog0, 0, 0, 0);
253 }
时间: 2024-08-28 21:36:56

[ucgui] 对话框7——按钮触发与模式窗口的相关文章

[ucgui] 对话框5——鼠标位置和移动窗口

>_<" 这节主要是获取鼠标的位置和把窗口设置为可以移动.其中设置窗口可以移动用FRAMEWIN_SetMoveable(hFrameWin, 1)就行了.而获得鼠标位置则是利用WM_TOUCH消息的state结构体所传送过来的位置信息(见56.57两行) 1 #define FACTOR 5 2 #define EYE_X1 18 3 #define EYE_X2 54 4 #define EYE_Y 26 5 #define EYE_RX 16 6 #define EYE_RY

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

>_<" 这里实现点击灰色窗口的按钮出现一个模式消息窗口,点击OK之后才能再聚焦到灰窗口:点击灰窗口除了按钮的地方,弹出一个非模式窗口. 1 static const GUI_WIDGET_CREATE_INFO _aDialogOrder[] = {//大的一个窗口(刚开始显示的,有一个按钮) 2 { FRAMEWIN_CreateIndirect, "Order vehicle", 0, 20, 50, 480, 360, 0 }, 3 { BUTTON_Cr

多个按钮触发同一个Bootstrap自适应模态窗口

在项目中可能会面对这样的一个场景: 界面上有多个按钮,我们希望点击这些按钮弹出同一个模态窗口,但希望模态窗口的内容是动态生成的,即,点击每个按钮弹出的模态窗口内容不同. 通常情况下,一个按钮对应一个模态窗口. <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <link href

模式窗口和非模式窗口

JS弹出模式窗口 和非模式窗口JS弹出模式窗口 一般来说,显示在最前面的窗口都是因为被激活获得焦点,要是窗口永远显示在最前面, 可以人为的设置窗口在blur时立刻focus,或者用模式.无模式对话框实现. 具体步骤  方法一:弹出窗口<body>里加上代码:onblur="self.focus()":      <body onblur="self.focus()">  方法二:用showModelDialog方法简历模式对话框,他的参数说明

[WPF疑难] 模式窗口被隐藏后重新显示时变成了非模式窗口

原文:[WPF疑难] 模式窗口被隐藏后重新显示时变成了非模式窗口 [WPF疑难] 模式窗口被隐藏后重新显示时变成了非模式窗口 周银辉 现象: 大家可以试试下面这个很有趣但会带来Defect的现象:当我们将子窗口按照ShowDialog()的方式显示出来的时候,很明显该窗口是模式化的(即主窗口等待该窗口的返回,主窗口将不相应用户输入),但如果此时将子窗口的Visibility设置成Visibility.Hidden来隐藏窗口,然后再将Visibility设置成Visibility.Visible来

JavaScript弹出模式窗口

解决思路:         一般来说,显示在最前面的窗口都是因为窗口被激活获得焦点,要使窗口永远显示在最前面,可以人为的设置窗口在blur时立刻focus,或者用模式.无模式对话框实现.         具体步骤:         方法一:弹出窗口<body>里加上代码:onblur="self.focus()":        <body onblur="self.focus()">         方法二:用showModalDialog

JavaScript点击事件/一个按钮触发另一个按钮

给按钮2添加点击事件click触发按钮1的点击事件,就算给按钮1添加样式display: none;或visibility: hidden;隐藏起来也能触发. <button type="button" id="btn1" onclick="alert('我是按钮1的弹框')" >按钮1</button> <button type="button" id="btn2">按

SharePoint 2013 showModalDialog 弹出模式窗口

1. SharePoint 弹出框 本文讲述SharePoint 2013 中使用 SP.UI.ModalDialog.showModalDialog时 showModalDialog  未定义的问题. function showDialog(title,url,width,height) { var options = { url:url, args: 7, title: title, dialogReturnValueCallback: dialogCallback }; if (width

C# 模式窗口下更新进度条

public partial class frmProcessBar : Form { public frmProcessBar() { InitializeComponent(); } public bool Increase(int nValue) { if (nValue > 0) { if (progressBar1.Value + nValue < progressBar1.Maximum) { progressBar1.Value += nValue; return true; }