硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2266|回复: 9
收起左侧

[μCGUI] 请问怎么通过按键退出MessageBox呢

[复制链接]

20

主题

92

回帖

152

积分

初级会员

积分
152
发表于 2018-7-9 21:25:56 | 显示全部楼层 |阅读模式
案例是这样的:GUI初始化之后建立对话框,对话框上有个“Message”按钮,按下后弹出消息框。
在电脑上模拟,鼠标点击消息框上的“OK”按钮可以退出消息框,但是我的板子是没有接入鼠标,用的是“小键盘”,弹出消息框后无法退出。
代码如下,请大家帮忙看看:
  1. #define ID_FRAMEWIN_0                                (GUI_ID_USER + 0x00)
  2. #define ID_EDIT_0                                        (GUI_ID_USER + 0x01)

  3. static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  4.         {FRAMEWIN_CreateIndirect, "Framewin", ID_FRAMEWIN_0,   0,   0, 320, 240, FRAMEWIN_CF_MOVEABLE, 0},
  5.         {EDIT_CreateIndirect,     "Edit",     ID_EDIT_0,      88,  27, 159,  29, 0, 0},
  6.         {BUTTON_CreateIndirect,   "Button",   GUI_ID_BUTTON0, 87,  73, 159,  30, 0, 0},
  7.         {BUTTON_CreateIndirect,   "Button",   GUI_ID_OK,      26, 139,  97,  31, 0, 0},
  8.         {BUTTON_CreateIndirect,   "Button",   GUI_ID_CANCEL, 179, 139, 100,  31, 0, 0},
  9. };

  10. static void _cbDialog(WM_MESSAGE *pMsg)
  11. {
  12.         int NCode;
  13.         int Id;
  14.         WM_HWIN hDlg;
  15.         WM_HWIN hItem;
  16.         WM_HWIN hMsg;
  17.        
  18.         hDlg = pMsg->hWin;
  19.        
  20.         switch (pMsg->MsgId) {
  21.         case WM_INIT_DIALOG:
  22.                 hItem = pMsg->hWin;
  23.                 FRAMEWIN_SetFont(hItem, &GUI_Font24_ASCII);
  24.                 FRAMEWIN_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
  25.                 FRAMEWIN_SetText(hItem, "armfly");

  26.                 hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_0);
  27.                 EDIT_SetMaxLen(hItem, 20);
  28.                 EDIT_SetText(hItem, "www.armfly.com");
  29.                 EDIT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
  30.                 EDIT_SetFont(hItem, &GUI_Font16_ASCII);
  31.                 EDIT_SetSel(hItem, 0, -1);

  32.                 hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_BUTTON0);
  33.                 BUTTON_SetText(hItem, "Message");
  34.                 BUTTON_SetFont(hItem, &GUI_Font16_ASCII);

  35.                 hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_OK);
  36.                 BUTTON_SetText(hItem, "OK");
  37.                 BUTTON_SetFont(hItem, &GUI_Font16_ASCII);

  38.                 hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_CANCEL);
  39.                 BUTTON_SetText(hItem, "Cancel");
  40.                 BUTTON_SetFont(hItem, &GUI_Font16_ASCII);
  41.                 break;
  42.         case WM_KEY:
  43.                 switch (((WM_KEY_INFO *)(pMsg->Data.p))->Key) {
  44.                 case GUI_KEY_ESCAPE:
  45.                         GUI_EndDialog(hDlg, 1);
  46.                         break;
  47.                 case GUI_KEY_ENTER:
  48.                         GUI_EndDialog(hDlg, 0);
  49.                         break;
  50.                 }
  51.                 break;
  52.         case WM_NOTIFY_PARENT:
  53.                 Id = WM_GetId(pMsg->hWinSrc);
  54.                 NCode = pMsg->Data.v;
  55.                 switch (Id) {
  56.                 case GUI_ID_BUTTON0:
  57.                         switch (NCode) {
  58.                         case WM_NOTIFICATION_CLICKED:
  59.                                 break;
  60.                         case WM_NOTIFICATION_RELEASED:
  61.                                 hMsg = GUI_MessageBox("New message!", "Caption/Title", GUI_MESSAGEBOX_CF_MOVEABLE);
  62.                                 WM_MakeModal(hMsg);
  63.                                 WM_SetFocus(hMsg);
  64.                                 // WM_InvalidateWindow(hMsg);
  65.                                 break;
  66.                         }
  67.                         break;
  68.                 case GUI_ID_OK:
  69.                         switch (NCode) {
  70.                         case WM_NOTIFICATION_CLICKED:
  71.                                 break;
  72.                         case WM_NOTIFICATION_RELEASED:
  73.                                 GUI_EndDialog(hDlg, 0);
  74.                                 break;
  75.                         }
  76.                         break;
  77.                 case GUI_ID_CANCEL:
  78.                         switch (NCode) {
  79.                         case WM_NOTIFICATION_CLICKED:
  80.                                 break;
  81.                         case WM_NOTIFICATION_RELEASED:
  82.                                 GUI_EndDialog(hDlg, 1);
  83.                                 break;
  84.                         }
  85.                         break;
  86.                 }
  87.                 break;
  88.         default:
  89.                 WM_DefaultProc(pMsg);
  90.                 break;
  91.         }
  92. }

  93. static void _cbBkWindow(WM_MESSAGE* pMsg) {
  94.   switch (pMsg->MsgId) {
  95.   case WM_PAINT:
  96.     GUI_SetBkColor(GUI_RED);
  97.     GUI_Clear();
  98.     GUI_SetColor(GUI_WHITE);
  99.     GUI_SetFont(&GUI_Font24_ASCII);
  100.     GUI_DispStringHCenterAt("Message Box - Sample", 480, 400);
  101.     break;
  102.   default:
  103.     WM_DefaultProc(pMsg);
  104.   }
  105. }

  106. void MainTask(void)
  107. {
  108.         GUI_Init();
  109.         WM_SetCallback(WM_HBKWIN, &_cbBkWindow);
  110.         while(1) {
  111.                 GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
  112.                 GUI_Delay(2000);
  113.         }
  114. }
复制代码



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2018-7-10 01:31:18 | 显示全部楼层
方便起见,直接使用对话框创建一个消息窗口即可,这样就方便小键盘关闭了,省事些。
回复

使用道具 举报

335

主题

2037

回帖

3047

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3047
发表于 2018-7-10 11:18:54 | 显示全部楼层
enter键和空格键都可以关闭这个对话框。
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-7-10 21:41:39 | 显示全部楼层
caicaptain2 发表于 2018-7-10 11:18
enter键和空格键都可以关闭这个对话框。

嗯嗯,谢谢你,对话框可以关闭,消息框关不了的。
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-7-10 21:44:00 | 显示全部楼层
eric2013 发表于 2018-7-10 01:31
方便起见,直接使用对话框创建一个消息窗口即可,这样就方便小键盘关闭了,省事些。

谢谢eric2013!
按你说的方法试了,消息框以“子对话框”的形式创建,现在可以关闭了,但是关闭了消息框后,“父对话框”没有焦点了,请问在哪个位置设置焦点呢?
  1. #define ID_FRAMEWIN_0                                (GUI_ID_USER + 0x00)
  2. #define ID_EDIT_0                                        (GUI_ID_USER + 0x01)
  3. #define ID_FRAMEWIN_1                                (GUI_ID_USER + 0x02)

  4. static void _cbDialog(WM_MESSAGE *pMsg);
  5. static void _cbDialogMessage(WM_MESSAGE *pMsg);

  6. static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  7.         {FRAMEWIN_CreateIndirect, "Framewin", ID_FRAMEWIN_0,   0,   0, 320, 240, FRAMEWIN_CF_MOVEABLE, 0},
  8.         {EDIT_CreateIndirect,     "Edit",     ID_EDIT_0,      88,  27, 159,  29, 0, 0},
  9.         {BUTTON_CreateIndirect,   "Button",   GUI_ID_BUTTON0, 87,  73, 159,  30, 0, 0},
  10.         {BUTTON_CreateIndirect,   "Button",   GUI_ID_OK,      26, 139,  97,  31, 0, 0},
  11.         {BUTTON_CreateIndirect,   "Button",   GUI_ID_CANCEL, 179, 139, 100,  31, 0, 0},
  12. };

  13. static const GUI_WIDGET_CREATE_INFO _aDialogCreateMessage[] = {
  14.         {FRAMEWIN_CreateIndirect, "Message",  ID_FRAMEWIN_1,   80, 40, 160, 120, FRAMEWIN_CF_MOVEABLE, 0},
  15.         {BUTTON_CreateIndirect,   "Button",   GUI_ID_BUTTON1,  40, 20, 80,  20,  0, 0},
  16. };

  17. static void _cbDialog(WM_MESSAGE *pMsg)
  18. {
  19.         int NCode;
  20.         int Id;
  21.         WM_HWIN hDlg;
  22.         WM_HWIN hItem;
  23.         WM_HWIN hMsg;
  24.        
  25.         hDlg = pMsg->hWin;
  26.        
  27.         switch (pMsg->MsgId) {
  28.         case WM_INIT_DIALOG:
  29.                 hItem = pMsg->hWin;
  30.                 FRAMEWIN_SetFont(hItem, &GUI_Font24_ASCII);
  31.                 FRAMEWIN_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
  32.                 FRAMEWIN_SetText(hItem, "armfly");

  33.                 hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_0);
  34.                 EDIT_SetMaxLen(hItem, 20);
  35.                 EDIT_SetText(hItem, "www.armfly.com");
  36.                 EDIT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
  37.                 EDIT_SetFont(hItem, &GUI_Font16_ASCII);
  38.                 EDIT_SetSel(hItem, 0, -1);

  39.                 hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_BUTTON0);
  40.                 BUTTON_SetText(hItem, "Message");
  41.                 BUTTON_SetFont(hItem, &GUI_Font16_ASCII);

  42.                 hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_OK);
  43.                 BUTTON_SetText(hItem, "OK");
  44.                 BUTTON_SetFont(hItem, &GUI_Font16_ASCII);

  45.                 hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_CANCEL);
  46.                 BUTTON_SetText(hItem, "Cancel");
  47.                 BUTTON_SetFont(hItem, &GUI_Font16_ASCII);
  48.                 break;
  49.         case WM_KEY:
  50.                 switch (((WM_KEY_INFO *)(pMsg->Data.p))->Key) {
  51.                 case GUI_KEY_ESCAPE:
  52.                         GUI_EndDialog(hDlg, 1);
  53.                         break;
  54.                 case GUI_KEY_ENTER:
  55.                         GUI_EndDialog(hDlg, 0);
  56.                         break;
  57.                 }
  58.                 break;
  59.         case WM_NOTIFY_PARENT:
  60.                 Id = WM_GetId(pMsg->hWinSrc);
  61.                 NCode = pMsg->Data.v;
  62.                 switch (Id) {
  63.                 case GUI_ID_BUTTON0:
  64.                         switch (NCode) {
  65.                         case WM_NOTIFICATION_CLICKED:
  66.                                 break;
  67.                         case WM_NOTIFICATION_RELEASED:
  68.                                 hMsg = GUI_CreateDialogBox(_aDialogCreateMessage, GUI_COUNTOF(_aDialogCreateMessage), _cbDialogMessage, hDlg, 0, 0);
  69.                                 break;
  70.                         }
  71.                         break;
  72.                 case GUI_ID_OK:
  73.                         switch (NCode) {
  74.                         case WM_NOTIFICATION_CLICKED:
  75.                                 break;
  76.                         case WM_NOTIFICATION_RELEASED:
  77.                                 GUI_EndDialog(hDlg, 0);
  78.                                 break;
  79.                         }
  80.                         break;
  81.                 case GUI_ID_CANCEL:
  82.                         switch (NCode) {
  83.                         case WM_NOTIFICATION_CLICKED:
  84.                                 break;
  85.                         case WM_NOTIFICATION_RELEASED:
  86.                                 GUI_EndDialog(hDlg, 1);
  87.                                 break;
  88.                         }
  89.                         break;
  90.                 }
  91.                 break;
  92.         default:
  93.                 WM_DefaultProc(pMsg);
  94.                 break;
  95.         }
  96. }

  97. static void _cbDialogMessage(WM_MESSAGE *pMsg)
  98. {
  99.         int NCode;
  100.         int Id;
  101.         WM_HWIN hDlg;
  102.         WM_HWIN hItem;

  103.         hDlg = pMsg->hWin;
  104.        
  105.         switch (pMsg->MsgId) {
  106.         case WM_INIT_DIALOG:
  107.                 hItem = pMsg->hWin;
  108.                 FRAMEWIN_SetFont(hItem, &GUI_Font24_ASCII);
  109.                 FRAMEWIN_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
  110.                 FRAMEWIN_SetText(hItem, "Message");

  111.                 hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_BUTTON1);
  112.                 BUTTON_SetText(hItem, "OK");
  113.                 BUTTON_SetFont(hItem, &GUI_Font16_ASCII);
  114.                 break;
  115.         case WM_NOTIFY_PARENT:
  116.                 Id = WM_GetId(pMsg->hWinSrc);
  117.                 NCode = pMsg->Data.v;
  118.                 switch (Id) {
  119.                 case GUI_ID_BUTTON1:
  120.                         switch (NCode) {
  121.                         case WM_NOTIFICATION_CLICKED:
  122.                                 break;
  123.                         case WM_NOTIFICATION_RELEASED:
  124.                                 GUI_EndDialog(hDlg, 1);
  125.                                 break;
  126.                         }
  127.                         break;
  128.                 }
  129.                 break;
  130.         default:
  131.                 WM_DefaultProc(pMsg);
  132.                 break;
  133.         }
  134. }

  135. static void _cbBkWindow(WM_MESSAGE* pMsg) {
  136.   switch (pMsg->MsgId) {
  137.   case WM_PAINT:
  138.     GUI_SetBkColor(GUI_RED);
  139.     GUI_Clear();
  140.     GUI_SetColor(GUI_WHITE);
  141.     GUI_SetFont(&GUI_Font24_ASCII);
  142.     GUI_DispStringHCenterAt("Message Box - Sample", 480, 400);
  143.     break;
  144.   default:
  145.     WM_DefaultProc(pMsg);
  146.   }
  147. }

  148. void MainTask(void)
  149. {
  150.         GUI_Init();
  151.         WM_SetCallback(WM_HBKWIN, &_cbBkWindow);
  152.         while(1) {
  153.                 GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
  154.                 GUI_Delay(2000);
  155.         }
  156. }
复制代码
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-7-10 22:14:40 | 显示全部楼层
还有一个问题,创建子对话框如果使用GUI_ExecDialogBox的话,还是不能退出的,请问这是违背了什么原则呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2018-7-11 01:05:44 | 显示全部楼层
tovax 发表于 2018-7-10 21:44
谢谢eric2013!
按你说的方法试了,消息框以“子对话框”的形式创建,现在可以关闭了,但是关闭了消息框 ...

加个WM_DELETE消息,在这里消息里面设置你要聚焦的窗口。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2018-7-11 01:07:23 | 显示全部楼层
tovax 发表于 2018-7-10 22:14
还有一个问题,创建子对话框如果使用GUI_ExecDialogBox的话,还是不能退出的,请问这是违背了什么原则呢?: ...

你在while 1之前调用非阻塞的GUI_CreateDialogBox创建即可。

你这个是阻塞的。另外GUI_Delay延迟搞的时间短些。
回复

使用道具 举报

20

主题

92

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2018-7-11 11:01:44 | 显示全部楼层
eric2013 发表于 2018-7-11 01:05
加个WM_DELETE消息,在这里消息里面设置你要聚焦的窗口。

谢谢,按你说的方法,现在可以了,以下是最终的代码:
  1. #define ID_FRAMEWIN_0                                (GUI_ID_USER + 0x00)
  2. #define ID_EDIT_0                                        (GUI_ID_USER + 0x01)
  3. #define ID_FRAMEWIN_1                                (GUI_ID_USER + 0x02)

  4. WM_HWIN hDialog;

  5. static void _cbDialog(WM_MESSAGE *pMsg);
  6. static void _cbDialogMessage(WM_MESSAGE *pMsg);

  7. static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  8.         {FRAMEWIN_CreateIndirect, "Framewin", ID_FRAMEWIN_0,   0,   0, 320, 240, FRAMEWIN_CF_MOVEABLE, 0},
  9.         {EDIT_CreateIndirect,     "Edit",     ID_EDIT_0,      88,  27, 159,  29, 0, 0},
  10.         {BUTTON_CreateIndirect,   "Button",   GUI_ID_BUTTON0, 87,  73, 159,  30, 0, 0},
  11.         {BUTTON_CreateIndirect,   "Button",   GUI_ID_OK,      26, 139,  97,  31, 0, 0},
  12.         {BUTTON_CreateIndirect,   "Button",   GUI_ID_CANCEL, 179, 139, 100,  31, 0, 0},
  13. };

  14. static const GUI_WIDGET_CREATE_INFO _aDialogCreateMessage[] = {
  15.         {FRAMEWIN_CreateIndirect, "Message",  ID_FRAMEWIN_1,   80, 40, 160, 120, FRAMEWIN_CF_MOVEABLE, 0},
  16.         {BUTTON_CreateIndirect,   "Button",   GUI_ID_BUTTON1,  40, 20, 80,  20,  0, 0},
  17. };

  18. static void _cbDialog(WM_MESSAGE *pMsg)
  19. {
  20.         int NCode;
  21.         int Id;
  22.         WM_HWIN hDlg;
  23.         WM_HWIN hItem;
  24.         WM_HWIN hMsg;
  25.        
  26.         hDlg = pMsg->hWin;
  27.        
  28.         switch (pMsg->MsgId) {
  29.         case WM_INIT_DIALOG:
  30.                 hItem = pMsg->hWin;
  31.                 FRAMEWIN_SetFont(hItem, &GUI_Font24_ASCII);
  32.                 FRAMEWIN_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
  33.                 FRAMEWIN_SetText(hItem, "armfly");

  34.                 hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_0);
  35.                 EDIT_SetMaxLen(hItem, 20);
  36.                 EDIT_SetText(hItem, "www.armfly.com");
  37.                 EDIT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
  38.                 EDIT_SetFont(hItem, &GUI_Font16_ASCII);
  39.                 EDIT_SetSel(hItem, 0, -1);

  40.                 hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_BUTTON0);
  41.                 BUTTON_SetText(hItem, "Message");
  42.                 BUTTON_SetFont(hItem, &GUI_Font16_ASCII);

  43.                 hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_OK);
  44.                 BUTTON_SetText(hItem, "OK");
  45.                 BUTTON_SetFont(hItem, &GUI_Font16_ASCII);

  46.                 hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_CANCEL);
  47.                 BUTTON_SetText(hItem, "Cancel");
  48.                 BUTTON_SetFont(hItem, &GUI_Font16_ASCII);
  49.                 break;
  50.         case WM_KEY:
  51.                 switch (((WM_KEY_INFO *)(pMsg->Data.p))->Key) {
  52.                 case GUI_KEY_ESCAPE:
  53.                         GUI_EndDialog(hDlg, 1);
  54.                         break;
  55.                 case GUI_KEY_ENTER:
  56.                         GUI_EndDialog(hDlg, 0);
  57.                         break;
  58.                 }
  59.                 break;
  60.         case WM_NOTIFY_PARENT:
  61.                 Id = WM_GetId(pMsg->hWinSrc);
  62.                 NCode = pMsg->Data.v;
  63.                 switch (Id) {
  64.                 case GUI_ID_BUTTON0:
  65.                         switch (NCode) {
  66.                         case WM_NOTIFICATION_CLICKED:
  67.                                 break;
  68.                         case WM_NOTIFICATION_RELEASED:
  69.                                 hMsg = GUI_CreateDialogBox(_aDialogCreateMessage, GUI_COUNTOF(_aDialogCreateMessage), _cbDialogMessage, WM_HBKWIN, 0, 0);
  70.                                 // hMsg = GUI_ExecDialogBox(_aDialogCreateMessage, GUI_COUNTOF(_aDialogCreateMessage), _cbDialogMessage, hDlg, 0, 0);
  71.                                 break;
  72.                         }
  73.                         break;
  74.                 case GUI_ID_OK:
  75.                         switch (NCode) {
  76.                         case WM_NOTIFICATION_CLICKED:
  77.                                 break;
  78.                         case WM_NOTIFICATION_RELEASED:
  79.                                 GUI_EndDialog(hDlg, 0);
  80.                                 break;
  81.                         }
  82.                         break;
  83.                 case GUI_ID_CANCEL:
  84.                         switch (NCode) {
  85.                         case WM_NOTIFICATION_CLICKED:
  86.                                 break;
  87.                         case WM_NOTIFICATION_RELEASED:
  88.                                 GUI_EndDialog(hDlg, 1);
  89.                                 break;
  90.                         }
  91.                         break;
  92.                 }
  93.                 break;
  94.         default:
  95.                 WM_DefaultProc(pMsg);
  96.                 break;
  97.         }
  98. }

  99. static void _cbDialogMessage(WM_MESSAGE *pMsg)
  100. {
  101.         int NCode;
  102.         int Id;
  103.         WM_HWIN hDlg;
  104.         WM_HWIN hItem;

  105.         hDlg = pMsg->hWin;
  106.        
  107.         switch (pMsg->MsgId) {
  108.         case WM_INIT_DIALOG:
  109.                 hItem = pMsg->hWin;
  110.                 FRAMEWIN_SetFont(hItem, &GUI_Font24_ASCII);
  111.                 FRAMEWIN_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
  112.                 FRAMEWIN_SetText(hItem, "Message");

  113.                 hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_BUTTON1);
  114.                 BUTTON_SetText(hItem, "OK");
  115.                 BUTTON_SetFont(hItem, &GUI_Font16_ASCII);
  116.                 break;
  117.         case WM_KEY:
  118.                 switch (((WM_KEY_INFO *)(pMsg->Data.p))->Key) {
  119.                 case GUI_KEY_ESCAPE:
  120.                         GUI_EndDialog(hDlg, 1);
  121.                         break;
  122.                 case GUI_KEY_ENTER:
  123.                         GUI_EndDialog(hDlg, 0);
  124.                         break;
  125.                 }
  126.                 break;
  127.         case WM_NOTIFY_PARENT:
  128.                 Id = WM_GetId(pMsg->hWinSrc);
  129.                 NCode = pMsg->Data.v;
  130.                 switch (Id) {
  131.                 case GUI_ID_BUTTON1:
  132.                         switch (NCode) {
  133.                         case WM_NOTIFICATION_CLICKED:
  134.                                 break;
  135.                         case WM_NOTIFICATION_RELEASED:
  136.                                 GUI_EndDialog(hDlg, 1);
  137.                                 break;
  138.                         }
  139.                         break;
  140.                 }
  141.                 break;
  142.         case WM_DELETE:
  143.                 WM_SetFocus(hDialog);
  144.                 break;
  145.         default:
  146.                 WM_DefaultProc(pMsg);
  147.                 break;
  148.         }
  149. }

  150. static void _cbBkWindow(WM_MESSAGE* pMsg) {
  151.         switch (pMsg->MsgId) {
  152.         case WM_PAINT:
  153.                 GUI_SetBkColor(GUI_RED);
  154.                 GUI_Clear();
  155.                 GUI_SetColor(GUI_WHITE);
  156.                 GUI_SetFont(&GUI_Font24_ASCII);
  157.                 GUI_DispStringHCenterAt("Message Box - Sample", 480, 400);
  158.                 break;
  159.         default:
  160.                 WM_DefaultProc(pMsg);
  161.         }
  162. }

  163. void MainTask(void)
  164. {
  165.         GUI_Init();
  166.         WM_SetCallback(WM_HBKWIN, &_cbBkWindow);
  167.         hDialog = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
  168.         while(1) {
  169.                 // GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
  170.                 GUI_Delay(100);
  171.         }
  172. }
复制代码
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2018-7-11 11:02:09 | 显示全部楼层
tovax 发表于 2018-7-11 11:01
谢谢,按你说的方法,现在可以了,以下是最终的代码:

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-10 21:56 , Processed in 0.250941 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表