CMenu与模态对话框摩擦造成卡死
CMenu与模态对话框冲突造成卡死最近发现一个问题,在弹出子菜单后使用快捷键截图(截图用模块对话框实现的)
CMenu与模态对话框冲突造成卡死
最近发现一个问题,在弹出子菜单后使用快捷键截图(截图用模块对话框实现的)
但是会造成卡死现象。选择在截图Dlg出现之前,销毁弹出子菜单,但是pSysMenu总是获取为NULL
// 销毁系统弹出菜单
void CCreateConfDlg::MissMenu()
{
// 销毁系统弹出菜单
CMenu* pSysMenu = GetSystemMenu(FALSE );
if( pSysMenu != NULL )
{
pSysMenu->DestroyMenu();
}
}
请教一下,这种情况一般应该如果处理?谢谢了
[最优解释]卡死的原因:
菜单弹出之后,它控制了鼠标消息(因为它内部调用了SetCapture函数),也就是说,所有的鼠标消息都会发送给菜单(菜单弹出后,鼠标移动到按钮上,你会发现按钮状态并不会变化)。此时,你突然DoModal,菜单还来不及ReleaseCapture,导致你的对话框不响应鼠标消息,但是可以响应键盘消息(你可以试试)。
[其他解释]在你Dlg还没有DoModal()或者Create()的时候,你的Dlg的HWND是NULL,所以无法调取GetSystemMenu
SDK的原型是
HMENU GetSystemMenu(
HWND hWnd, // handle to window
BOOL bRevert // reset option
);
[其他解释]在Dlg的OnInitDialg()中再试试吧
[其他解释]这个窗口是有DoModal的。
[其他解释]弄了半天,终于解决了。原因正如你所说,在模态对话框调用之前,向子菜单所在窗口发送WM_CANCELMODE消息即可。谢谢