我有一个对话框,我需要在CPropertySheet和独立对话框中显示。我选择不要有两个单独的类来避免代码冗余(我在那些对话框中进行了很多更改,并且不断地同步2个类将是地狱),而当我想将它显示为一个独立的对话框时,我只是调用CPropertyPage :: DoModal。这会导致一些问题,但我已经解决了大部分问题。
然而,有些仍然存在,即输入和esc不起作用。按Tab键也不会改变焦点。这让我觉得CPropertyPage会占用所有键盘输入,或者它可能会尝试将它们传递给它的父级。
我是如何在独立模式下覆盖该行为的?
答案 0 :(得分:0)
我相信这对你有用。我没有一个可以测试它的对话框所以我从记忆中完成所有操作但是我相信你可以添加一个你在调用DoModal
时设置的bool或者将它作为你之前设置的属性公开调用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