CMFCMenuButton 不关闭
CMFCMenuButton does not close
我有一个 CDialog
和一个 CFMCMenuButton
。当我打开它时,一切都正常显示:
当我点击其他地方关闭菜单时出现问题。菜单似乎无法关闭,除非用户选择其中的一个选项。如果我按键盘上的 Escape 键,对话框会自行关闭,这太过分了;我真的希望它只关闭菜单。
我知道我可以通过将资源文件中的 属性 "OS Menu" 设置为 True 来解决这个问题(或者等价地,分配它的 属性 m_bOSMenu= TRUE
)。我会得到:
如图所示,结果是:
- 我松了图标(不是很重要)
- 我放弃了由
OnInitMenuPopup
完成的一些项目的禁用(重要)(旁注:第二个菜单栏也是由 OnInitMenuPopup
完成的,它看起来应该是这样)。如果用户单击这些选项,它们将起作用,但不应起作用。
我该如何解决这个问题?
答案直接来自 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,显示图标,禁用的选项实际上被禁用并变灰!
的一些文档
我有一个 CDialog
和一个 CFMCMenuButton
。当我打开它时,一切都正常显示:
当我点击其他地方关闭菜单时出现问题。菜单似乎无法关闭,除非用户选择其中的一个选项。如果我按键盘上的 Escape 键,对话框会自行关闭,这太过分了;我真的希望它只关闭菜单。
我知道我可以通过将资源文件中的 属性 "OS Menu" 设置为 True 来解决这个问题(或者等价地,分配它的 属性 m_bOSMenu= TRUE
)。我会得到:
如图所示,结果是:
- 我松了图标(不是很重要)
- 我放弃了由
OnInitMenuPopup
完成的一些项目的禁用(重要)(旁注:第二个菜单栏也是由OnInitMenuPopup
完成的,它看起来应该是这样)。如果用户单击这些选项,它们将起作用,但不应起作用。
我该如何解决这个问题?
答案直接来自 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,显示图标,禁用的选项实际上被禁用并变灰!