我做了一个主界面,主界面上有几个图标,通过实体按键可以打开相应的对话框,可是没法对对话框上的控件进行操作,也没法关掉对话框,按键发送 GUI_SendKeyMsg(GUI_KEY_TAB,1)消息也没用,是焦点没切换到对话框上的原因吗?该如何解决呢?
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
{ FRAMEWIN_CreateIndirect, "Framewin", ID_FRAMEWIN_0, 0, 0, 320, 219, 0, 0x0, 0 },
{ SPINBOX_CreateIndirect, "Spinbox", ID_SPINBOX_0, 95, 160, 60, 30, 0, 0x0, 0 },
{ SPINBOX_CreateIndirect, "Spinbox", ID_SPINBOX_1, 175, 160, 60, 30, 0, 0x0, 0 },
{ SPINBOX_CreateIndirect, "Spinbox", ID_SPINBOX_5, 5, 160, 70, 30, 0, 0x0, 0 },
{ SPINBOX_CreateIndirect, "Spinbox", ID_SPINBOX_2, 5, 100, 60, 30, 0, 0x0, 0 },
{ SPINBOX_CreateIndirect, "Spinbox", ID_SPINBOX_3, 85, 100, 60, 30, 0, 0x0, 0 },
{ SPINBOX_CreateIndirect, "Spinbox", ID_SPINBOX_8, 165, 100, 60, 30, 0, 0x0, 0 },
{ SPINBOX_CreateIndirect, "Spinbox", ID_SPINBOX_6, 5, 25, 60, 30, 0, 0x0, 0 },
{ SPINBOX_CreateIndirect, "Spinbox", ID_SPINBOX_7, 85, 25, 60, 30, 0, 0x0, 0 },
{ SPINBOX_CreateIndirect, "Spinbox", ID_SPINBOX_4, 165, 25, 60, 30, 0, 0x0, 0 },
{ SPINBOX_CreateIndirect, "Spinbox", ID_SPINBOX_9, 245, 25, 60, 30, 0, 0x0, 0 },
{ TEXT_CreateIndirect, "Text", ID_TEXT_0, 8, 140, 80, 20, 0, 0x64, 0 },
{ TEXT_CreateIndirect, "Text", ID_TEXT_1, 5, 5, 80, 20, 0, 0x0, 0 },
{ TEXT_CreateIndirect, "Text", ID_TEXT_2, 6, 80, 80, 20, 0, 0x64, 0 },
{ TEXT_CreateIndirect, "Text", ID_TEXT_3, 6, 55, 80, 20, 0, 0x0, 0 },
{ TEXT_CreateIndirect, "Text", ID_TEXT_4, 87, 55, 80, 20, 0, 0x0, 0 },
{ TEXT_CreateIndirect, "Text", ID_TEXT_5, 167, 55, 80, 20, 0, 0x0, 0 },
{ TEXT_CreateIndirect, "Text", ID_TEXT_6, 247, 55, 80, 20, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "Button", ID_BUTTON_0, 245, 228, 80, 20, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "Button", ID_BUTTON_1, 253, 181, 55, 30, 0, 0x0, 0 },
// USER START (Optionally insert additional widgets)
// USER END
};
响应按键消息的回调
WM_HWIN hDlg;
hDlg = pMsg->hWin;
hDlg = WM_GetDialogItem(pMsg->hWin, ID_FRAMEWIN_0);
case WM_KEY:
switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key)
{
case GUI_KEY_ESCAPE:
GUI_EndDialog(hDlg, 1);
break;
case GUI_KEY_ENTER:
GUI_EndDialog(hDlg, 0);
break;
}
break;
这是其中一个图标对应的对话框
void STemWin_Time_Setting(void)
{
WM_HWIN hWin;
hWin = GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbDialog, 0, 0, 21);
WM_SetFocus(hWin);
}
按键任务
void KEY_Task(void * pdata)
{
while (1)
{
KEY_NewScan();
if (Trg & KEY_OK)
{
GUI_SendKeyMsg(GUI_KEY_ENTER,1);
}
else if (Trg & KEY_RIGHT)
{
GUI_SendKeyMsg(GUI_KEY_RIGHT,1);
}
else if (Trg & KEY_LEFT)
{
GUI_SendKeyMsg(GUI_KEY_TAB,1);
// GUI_StoreKeyMsg(GUI_KEY_LEFT,1);
}
else if (Trg & KEY_UP)
{
GUI_SendKeyMsg(GUI_KEY_UP,1);
}
else if (Trg & KEY_DW)
{
// GUI_StoreKeyMsg(GUI_KEY_DOWN,1);
}
OSTimeDlyHMSM(0, 0, 0, 20); //延时
};
} |