|

楼主 |
发表于 2017-8-1 14:13:39
|
显示全部楼层
硬汉哥,我在上述创立子窗口的基础上,聚焦到了子窗口。
子窗口进行一系列操作后,想关闭子窗口,将焦点回到父窗口的控件上,不知道怎么操作才可行?
我是用按键进行操作。
/****************父窗口************************/
static void _cbDialog0(WM_MESSAGE * pMsg)
{
static int selNum = 0;
static ICONVIEW_Handle hIconview;
static WM_HWIN hWinChild;
switch (pMsg->MsgId)
{
case WM_INIT_DIALOG:
... ...
IconviewCreation(pMsg, ID_ICONVIEW_0, _aBitmapItem, GUI_COUNTOF(_aBitmapItem)); // iconview创立函数
hIconview = WM_GetDialogItem(pMsg->hWin, ID_ICONVIEW_0);
WM_SetFocus(hIconview); // 页面聚焦在Iconview控件
break;
case WM_KEY:
switch(((WM_KEY_INFO*)(pMsg->Data.p))->Key)
{
... ...
case GUI_KEY_ENTER:
WM_SendMessageNoPara(pMsg->hWin, MSG_SELECTED);
break;
default:
break;
}
break;
case MSG_SELECTED:
selNum = ICONVIEW_GetSel(hIconview);
switch (selNum)
{
case 0:
hWinChild = WM_CreateWindowAsChild(100, 100, 200, 100, pMsg->hWin, WM_CF_SHOW, _cbChildWindow, 0); // 创建子窗口
WM_SetFocus(hWinChild); // 聚焦到子窗口
break;
... ...
}
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
/****************子窗口************************/
static void _cbChildWindow (WM_MESSAGE * pMsg)
{
static TEXT_Handle hText;
static EDIT_Handle hEdit;
switch (pMsg->MsgId)
{
case WM_CREATE:
hText = TEXT_CreateEx(4, 0, 200, 30, pMsg->hWin, WM_CF_SHOW, 0, ID_TEXT_0, "New File");
hEdit = EDIT_CreateEx(100, 30, 90, 30, pMsg->hWin, WM_CF_SHOW, 0, ID_EDIT_0, 40);
EDIT_SetText(hEdit, " ress...");
EDIT_SetFont(hEdit, GUI_FONT_16B_ASCII);
EDIT_EnableBlink(hEdit, 3000, 1);
WM_SetFocus(hEdit); // 聚焦在子窗口的hEdit控件上
break;
case WM_KEY:
switch(((WM_KEY_INFO*)(pMsg->Data.p))->Key)
{
case GUI_KEY_ESCAPE:
WM_DeleteWindow(pMsg->hWin); // 删除子窗口
WM_SetFocus(WM_GetParent(pMsg->hWin)); // 聚集到父窗口
break;
... ...
default:
break;
}
break;
}
}
/********************END**********************/
聚焦不到父窗口的原因应该是先删除了子窗口,下面的(2)语句不执行了
但是如果(1)(2)交换顺序,聚焦到父窗口后(1)又不执行了。。。
(1)WM_DeleteWindow(pMsg->hWin); // 删除子窗口
(2)WM_SetFocus(WM_GetParent(pMsg->hWin)); // 聚集到父窗口
请问类似这种,先聚焦到子窗口后,该如何自我关闭恢复聚焦到父窗口呢?[s:123] |
|