首页 > 代码库 > [ucgui] 对话框7——按钮触发与模式窗口

[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=http://www.mamicode.com/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 END138     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 }

 

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