MFC菜单项保持灰色

时间:2016-11-29 11:03:31

标签: mfc

我有一个名为Properties的CDialogEx类,我在其中处理ON_COMMAND消息。现在,当我单击菜单项ID_EDIT_PROPERTIES(作为主菜单中的子菜单)时,应该调用ON_COMMAND。事件处理程序向导为我编写了该代码,但是当我启动Application时,菜单项仍然是灰色的。我试图通过在ON_UPDATE_COMMAND_UI发生时调用EnableMenuItem来手动激活它,但无济于事。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

您只需要了解如何处理启用/禁用菜单项:

  • 如果既没有ON_COMMAND也没有ON_UPDATE_COMMAND_UI处理程序,则该项目被禁用。
  • 如果没有ON_UPDATE_COMMAND_UI处理程序但在当前活动的文档或视图中存在ON_COMMAND处理程序(或者甚至是"大型机"),则启用该项目。
  • 如果存在ON_UPDATE_COMMAND_UI处理程序,则处理程序(pCmdUI->Enable(bEnableState))确定禁用项目。

另请注意:

  • 您可能不会自己调用EnableMenuItem(),而是在ON_UPDATE_COMMAND_UI处理程序中调用pCmdUI->Enable(bEnableState)。这不仅会影响菜单项,还会影响任何其他"命令" -type项(具有相同的ID),例如主菜单,上下文菜单,工具栏或钢筋按钮。
  • 放置处理程序的位置,是应用程序设计的问题,取决于您正在处理或表示的数据。它可以放在大型机类中(如果它取决于某些"全局"数据或设置),在文档类中(如果它依赖于或更改文档中的某些数据或设置 - 可能影响所有视图),或在视图类(-es)中(仅取决于或影响当前视图)。

在您的情况下,如果我理解正确,该项被禁用,因为处理程序在CDialogEx派生类中,但尚未创建此类的实例,即您的ID_EDIT_PROPERTIES命令没有ON_COMMAND处理程序。 / p>

答案 1 :(得分:0)

Per m_bAutoMenuEnable,当启用此数据成员(默认值)时,当用户下拉菜单时,将自动禁用没有ON_UPDATE_COMMAND_UI或ON_COMMAND处理程序的菜单项。

答案 2 :(得分:0)

我承认我不知道CDialogEx的情况有所不同,但对于CDialog我发现UPDATE_COMMAND_UI除非我处理{{3}事件。

在OnKickIdle事件处理程序中调用:

WM_KICKIDLE

CWnd::UpdateDialogControls上有一个简短的教程

如果CDialogEx取代此信息,请原谅我,我将删除答案。