1

我有一个对话框,我需要在 CPropertySheet 中和作为独立对话框显示。我选择不使用 2 个单独的类以避免代码冗余(我在这些对话框中进行了很多更改,并且必须不断同步 2 个类将是地狱),相反,当我想将其显示为独立对话框时,我只是调用 CPropertyPage::DoModal。这会导致一些问题,但我已经解决了大部分问题。

但是,有些仍然存在,即 enter 和 esc 不起作用。同样按 Tab 也不会改变焦点。这让我觉得 CPropertyPage 吃掉了所有的键盘输入,或者它可能试图将它们传递给它的父级。

有什么想法可以在独立模式下覆盖该行为吗?

4

1 回答 1

0

我相信这对你有用。我没有可以测试它的对话框,所以我是从内存中完成的,但我相信你可以添加一个你在调用时设置的布尔值,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

于 2012-07-19T14:47:28.863 回答