1

我有CDialog一个CFMCMenuButton。当我打开它时,一切正常:

带有菜单按钮的 CDialog

当我单击其他地方关闭菜单时,就会出现问题。菜单似乎无法关闭,除非用户选择它的选项。如果我在键盘上按 Escape,对话框会自行关闭,这太激烈了;我真的希望它只关闭菜单。

我知道我可以通过将资源文件中的属性“OS Menu”设置为 True (或等效地分配其属性m_bOSMenu= TRUE)来解决这个问题。我会得到:

带有 OS Menu 属性设置为 TRUE 的菜单按钮的 CDialog

如图所示,后果是:

  • 我松开了图标(不是很重要)
  • 我失去了一些项目的禁用(重要)由OnInitMenuPopup(旁注:第二个菜单列也是由完成的OnInitMenuPopup,它看起来应该是)。如果用户单击这些选项,它们将起作用,但它们不应该。

我该如何解决这个问题?

4

1 回答 1

1

答案直接来自 MFC 源。

该文件afxmenubutton.cpp在其CMFCMenuButton::OnShowMenu函数中建议使用 aCDialogEx而不是 a CDialog

#ifdef _DEBUG
    if ((pParent->IsKindOf(RUNTIME_CLASS(CDialog))) && (!pParent->IsKindOf(RUNTIME_CLASS(CDialogEx))))
    {
        TRACE(_T("CMFCMenuButton parent is CDialog, should be CDialogEx for popup menu handling to work correctly.\n"));
    }
#endif

然后我将我的对话框类更改为派生自CDialogEx,现在一切正常!将 OS Menu 属性设置为 False,将显示图标,并且禁用的选项确实被禁用并变灰!

更新: https ://msdn.microsoft.com/en-us/library/Bb983913.aspx 上的一些文档

于 2015-08-14T10:20:17.883 回答