UPDATE_COMMAND_UI消息,在什么时侯触发?和COMMAND一起触发么?
在UPDATE_COMMAND_UI消息响应函数中利用pCmdUI可以动态地改变菜单的状态么?
工具栏的UPDATE_COMMAND_UI机制是什么意思?我在消息代码中并没有发现工具栏的UPDATE_COMMAND_UI处理函数啊,我试图想建立工具栏的UPDATE_COMMAND_UI消息对应的函数可是不知道如何建立。请指教。
如果方便的话,可以给我举个简单的例子么?谢谢了。

解决方案 »

  1.   

    还有,UPDATE_COMMAND_UI响应函数中的pCmdUI参数是具体是个什么东西?
      

  2.   

    ?UPDATE_COMMAND_UI消息,在什么时侯触发?和COMMAND一起触发么?
    在OnIdle的时候,也就是消息队列中没有等待处理的消息的空闲时候。当调用更新处理程序时
    假设用户在“文件”菜单上单击鼠标,从而生成 WM_INITMENUPOPUP 消息。框架的更新机制在菜单下拉前集中更新“文件”菜单上的所有项,以便用户可以看到该消息。为此,框架沿标准命令路径为弹出菜单中的所有菜单项传送更新命令。路径上的命令目标将有机会更新所有菜单项,进行更新的方法是将更新命令同 ON_UPDATE_COMMAND_UI 窗体的适当消息映射项相匹配,然后调用“更新处理”函数。因而,对于有六个菜单项的菜单会发送六个更新命令。如果菜单项的命令 ID 有更新处理程序,则将调用该处理程序进行更新。如果没有,框架将检查该命令 ID 的处理程序是否存在,然后根据需要启用或禁用该菜单项。如果框架在命令传送过程中没有找到 ON_UPDATE_COMMAND_UI 项,它将自动启用用户界面对象,前提是某处存在具有相同命令 ID 的 ON_COMMAND 项。否则框架将禁用用户界面对象。因此,若要确保启用用户界面对象,请提供该对象所生成命令的处理程序或提供它的更新处理程序。请参见用户界面对象和命令 ID 主题中的图。可以禁用用户界面对象的默认禁用。有关更多信息,请参见“MFC 参考”中 CFrameWnd 类的 m_bAutoMenuEnable 成员。菜单初始化在框架中自动完成,并在应用程序接收到 WM_INITMENUPOPUP 消息时发生。在空闲循环过程中,框架在命令路径中搜索按钮更新处理程序,所采用的方式与搜索菜单基本相同。
    ?在UPDATE_COMMAND_UI消息响应函数中利用pCmdUI可以动态地改变菜单的状态么?
    能。?工具栏的UPDATE_COMMAND_UI机制是什么意思?我在消息代码中并没有发现工具栏的UPDATE_COMMAND_UI处理函数啊,我试图想建立工具栏的UPDATE_COMMAND_UI消息对应的函数可是不知道如何建立。请指教。
    工具栏和菜单是一样的,只要菜单和工具栏具有同样的ID就可以了。难道你设计了工具栏不提供菜单的吗??如果方便的话,可以给我举个简单的例子么?谢谢了。
    pCmdUI->Enable(TRUE);//使能
    pCmdUI->Enable(FALSE); //失效?还有,UPDATE_COMMAND_UI响应函数中的pCmdUI参数是具体是个什么东西?
    CCmdUI 类
    当框架将更新命令传送到其处理程序时,它将指向 CCmdUI 对象(或指向 CCmdUI 派生类对象)的指针传递给处理程序。该对象表示生成此命令的菜单项、工具栏按钮或其他用户界面对象。更新处理程序通过指针调用 CCmdUI 结构的成员函数以更新用户界面对象。例如,下面是“全部清除”菜单项的更新处理程序:void CMyClass::OnUpdateToolsMyTool( CCmdUI* pCmdUI )
    {
        if( ToolAvailable() )
            pCmdUI->Enable( TRUE );
    }
    该处理程序调用可访问此菜单项的对象的 Enable 成员函数。Enable 使此菜单项可用。
    如何更新用户界面对象
    通常情况下,菜单项和工具栏按钮具有一个以上的状态。例如,如果菜单项在当前上下文中不可用,则它会变灰(无效)。也可选中或取消选中菜单项。如果工具栏按钮不可用,也可将其禁用;否则可以选中它。当程序条件更改时,谁更新这些项的状态?在逻辑上,如果菜单项生成由某个对象(比方说文档)处理的命令,让文档更新菜单项是合情理的。文档可能包含更新所依据的信息。如果命令具有多个用户界面对象(或许是一个菜单项和一个工具栏按钮),则两者都传送到同一处理函数。这将封装单个位置上的所有等效用户界面对象的用户界面更新代码。框架提供了用于自动更新用户界面对象的便利接口。您可选择以其他方式进行更新,但框架提供的接口效率高且容易使用。
    以上都是我从MSDN上复制的。
      

  3.   

    UPDATE_COMMAND_UI消息的触发是在你更新那一个菜单项的时候。比如说点击"文件"在弹出文件菜单的同时就触发了UPDATE_COMMAND_UI。