我有一个对话框应用程序,想要在对话框顶部有可点击的菜单项。这些项目不显示下拉菜单,而是实际运行相关的命令。
我通过在对话框属性中设置Popup=False并分配消息ID来实现此操作,但我的问题是当没有意义让该项可点击时(取决于存储在对话框中的内部状态)无法正确地禁用该项。
我已经发现如何禁用任何弹出父菜单项,具体信息请查看 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);
}
这部分功能有一些问题,如果你从应用程序中切换到其他窗口,它会显示为禁用状态,否则不会。
有没有一种方法可以通过编程方式使该区域无效?
我认为涉及到一个非客户端区域消息。