CMFCMenuButton 不关闭

CMFCMenuButton does not close

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

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

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

如图所示,结果是:

我该如何解决这个问题?

答案直接来自 MFC 源。

文件 afxmenubutton.cpp 在其 CMFCMenuButton::OnShowMenu 函数中建议使用 CDialogEx 而不是 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

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

更新:关于https://msdn.microsoft.com/en-us/library/Bb983913.aspx

的一些文档