我有一个名为 Properties 的
CDialogEx
类,我在其中处理 ON_COMMAND
消息。现在,当我单击菜单项 ON_COMMAND
(作为主菜单的子菜单)时,应该调用 ID_EDIT_PROPERTIES
。事件处理程序向导为我编写了该代码,但是当我启动应用程序时,菜单项保持灰色。我尝试在 EnableMenuItem
发生时通过调用 ON_UPDATE_COMMAND_UI
来手动激活它,但没有成功。
任何帮助将不胜感激。
您只需要了解如何处理菜单项启用/禁用:
pCmdUI->Enable(bEnableState)
)。另请记住:
EnableMenuItem()
,而是在 ON_UPDATE_COMMAND_UI 处理程序中调用 pCmdUI->Enable(bEnableState)
。这不仅影响菜单项,还影响任何其他“命令”类型的项目(具有相同的 ID),例如主菜单、上下文菜单、工具栏或钢筋按钮。在你的情况下,如果我理解正确,该项目被禁用,因为处理程序位于 CDialogEx 派生类中,但尚未创建该类的实例,即您的 ID_EDIT_PROPERTIES 命令不存在 ON_COMMAND 处理程序。
m_bAutoMenuEnable
,当启用此数据成员(这是默认值)时,当用户下拉菜单时,没有 ON_UPDATE_COMMAND_UI
或 ON_COMMAND 处理程序的菜单项将被自动禁用。
我承认我不知道
CDialogEx
是不同的,但是对于 CDialog
我发现 UPDATE_COMMAND_UI
从来没有工作过,除非我处理了 WM_KICKIDLE 事件。
在 OnKickIdle 事件处理程序中调用:
上面有一个简短的教程这里。
如果
CDialogEx
取代此信息,请原谅我,我将删除答案。