何时调用更新处理程序

假设用户单击“文件”菜单中的鼠标,这将生成WM_INITMENUPOPUP消息。 框架的更新机制在菜单下拉之前会统一更新“文件”菜单上的所有项,以便用户可以看到它。

为此,框架会按照标准命令路由为弹出菜单中的所有菜单项更新命令。 路由上的命令目标可以通过将 update 命令与相应的消息映射条目(窗体 ON_UPDATE_COMMAND_UI)匹配并调用“更新处理程序”函数来更新任何菜单项。 因此,对于具有六个菜单项的菜单,会发送六个更新命令。如果菜单项的命令 ID 存在更新处理程序,则会调用它来执行更新。 否则,框架将检查该命令 ID 是否存在处理程序,并根据需要启用或禁用菜单项。

如果框架在命令路由过程中找不到条目 ON_UPDATE_COMMAND_UI ,则当存在具有相同 ON_COMMAND 命令 ID 的某个条目时,它会自动启用用户界面对象。 否则,它将禁用用户界面对象。 因此,若要确保启用用户界面对象,请为该对象生成的命令提供处理程序或为其提供更新处理程序。 请参阅主题 User-Interface 对象和命令 ID 中的图。

可以禁用用户界面对象的默认禁用。 有关详细信息,请参阅 MFC 参考中的类CFrameWndm_bAutoMenuEnable成员。

当应用程序收到WM_INITMENUPOPUP消息时,菜单初始化在框架中是自动进行的。 在空闲循环期间,框架以与菜单相同的方式搜索按钮更新处理程序的命令路由。

另请参阅

如何:更新 User-Interface 对象