我有一个对话框,需要同时显示在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/

10-12 00:16
查看更多