我有一个对话框,需要同时显示在CPropertySheet内部和作为独立对话框。我选择不使用2个单独的类来避免代码冗余(我在那些对话框中进行了大量更改,而必须不断同步2个类将是地狱),而是当我想将其显示为独立对话框时,我只是调用CPropertyPage :: DoModal。这会导致一些问题,但是我已经修复了大多数问题。
但是,仍然存在一些问题,即enter和esc不起作用。同时按Tab键也不会改变焦点。这使我认为CPropertyPage吞噬了所有键盘输入,或者它试图将它们传递给其父级。
有什么想法可以在独立模式下覆盖该行为吗?
最佳答案
我相信这对您有用。我没有可以用来测试的对话框,因此我可以从内存中进行所有操作,但我相信您可以添加在调用DoModal
时设置的布尔值,或将其公开为在调用前设置的属性到DoModal
以指示它正在作为独立对话框运行,然后像这样覆盖PreTranslateMessage
:
CMyPropertyPage::PreTranslateMessage(MSG* pMsg)
{
if (m_runningAsStandalone && pMsg->message == WM_KEYDOWN)
{
UINT key = pMsg->wParam;
switch(pMsg->wParam)
{
case VK_RETURN:
OnOK();
return TRUE;
case VK_ESCAPE:
OnClose();
return TRUE;
}
}
return CPropertyPage::PreTranslateMessage(pMsg);
}
您可能还会发现此链接很有帮助http://support.microsoft.com/kb/125645
关于c++ - 当显示为独立对话框时,CPropertyPage派生对话框未在Esc上关闭,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11562960/