这就是我正在做的事情。我创建了一个组合框,但我没有使用它。单击它时,它会调用trackpopup并显示上下文菜单。然而,在我点击上下文菜单之后,我希望它能够像你点击任何地方(杀死焦点)或从组合框中选择一个项目一样关闭组合框。
以下是组合框的事件:
if(uMsg == WM_COMMAND)
{
HMENU m;
m = CreatePopupMenu();
MENUITEMINFO itm;
itm.cbSize = sizeof(MENUITEMINFO);
itm.fMask = MIIM_FTYPE | MIIM_STRING;
itm.fType = MIIM_STRING;
itm.dwTypeData = "Kill time";
itm.cch = 12;
POINT p;
GetCursorPos(&p);
InsertMenuItem(m,4,false,&itm);
if((int)HIWORD(wParam) == CBN_DROPDOWN)
{
SendMessage(engineGL.controls.TopSelHwnd,WM_KILLFOCUS,(WPARAM)engineGL.controls.TopSelHwnd,0);
SendMessage(engineGL.controls.TopSelHwnd,WM_IME_SETCONTEXT,(WPARAM)0,(LPARAM)ISC_SHOWUIALL);
TrackPopupMenu(m,0,p.x,p.y,NULL,hWnd,NULL);
SendMessage(hWnd,WM_KILLFOCUS,0,0);
SetFocus(HWND_DESKTOP);
}
return 1;
}
如何点击上下文菜单中的项目后,组合框会正常关闭,好像我真的从中选择了一个项目?
由于
答案 0 :(得分:2)
我不确定。需要尝试你的代码。
但是我确信不应该手动发送WM_KILLFOCUS
消息。相反,您需要通过调用SetFocus
将焦点设置到另一个窗口。操作系统会自动向失去焦点的窗口和获得焦点的新窗口发送消息。