我有一个对话框应用程序,我希望在对话框顶部有可单击的菜单项。这些项目不显示下拉菜单,但实际上运行关联的命令。
我通过在对话框属性中设置 Popup=False 并分配消息 ID 来做到这一点,但我的问题是,当项目可点击没有意义时,无法正确禁用该项目(取决于存储在对话)
我已经找到了如何禁用任何弹出父菜单项http://www.microsoft.com/msj/0299/c/c0299.aspx http://www.microsoft.com/msj/0299/c/c0299.aspx,但这并不是我想要的
我还从 msdn 知识库文章 KB242577 中找到了如何将菜单命令路由添加到对话框。
这适用于子菜单项,但不适用于顶级菜单。
我目前正在使用以下函数来执行禁用操作
void CYourDlg::EnableMenuItem(UINT nCommand, BOOL bEnable)
{
CMenu* pMenu = GetMenu();
pMenu->EnableMenuItem(nCommand, bEnable ? 0 : MF_DISABLED | MF_GRAYED);
}
这一半有效,如果您使用 alt-tab 离开应用程序,它确实显示为禁用,否则不会。
有没有办法以编程方式使该区域无效?
我认为可能涉及非客户区消息。
我没有尝试过,但在常规窗口(不是对话框)中CWnd::绘制菜单栏 http://msdn.microsoft.com/en-us/library/b8ze1zsd(VS.80).aspx应该做你想做的事。它也可以与基于对话框的应用程序一起使用。
void CYourDlg::EnableMenuItem(UINT nCommand, BOOL bEnable)
{
CMenu* pMenu = GetMenu();
pMenu->EnableMenuItem(nCommand, bEnable ? 0 : MF_DISABLED | MF_GRAYED);
DrawMenuBar();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)