书上有这么一段话:
    UPDATE_COMMAND_UI机制用于处理菜单和工具条,例如设置工具条按钮的状态enabled/disenabled。但是,该机制只能直接用于基于文档/视图结构的应用程序,对于对话框,MFC还没有提供类似的功能来处理按钮状态。(再下在就是在工具条中增加UPDATE_COMMAND_UI机制的实例)问题:
此机制的功能是不是使按钮、菜单禁用(变灰)?
据查阅资料得知:使按钮、菜单禁用(变灰)不是还有:EnableWindow()和EnableMenuItem()吗?
上文中提到:“MFC还没有提供类似的功能来处理按钮状态”什么意思?
请各位指教。谢谢。
如果方便的话,给我举个简单的实例,解释UPDATE_COMMAND_UI机制的用途好么?谢谢。

解决方案 »

  1.   

    此机制的功能是不是使按钮、菜单禁用(变灰)?
    -----------------------------------------------
    是为了标识按钮、菜单当前的状态
    不只是变灰pCmdUI->Enable(m_bXXX);
    还有如:pCmdUI->SetCheck()
    pCmdUI->SetRadio();
    在触发命令的同时,改变按钮、菜单当前的状态
    以记录操作
    不知道你指的是这个问题么?
      

  2.   

    不是为了方便么。
    实现一个问题的方法有很多种,自己可以选择,UI机制提供了对工具栏和菜单项改变状态的有效控制,因为工具栏和菜单项是Windows自己绘制的,工具栏上的按钮并不是Button控件,而Button是Button自己绘制的,实现机制不同。
    最简单的应用,就是在响应UPDATE_COMMAND_UI消息的时候根据某种状态变量改变工具栏或者菜单项的状态。
      

  3.   

    当你点菜单时将触发UPDATE_COMMAND_UI
    然后你可以在消息函数里面设置各个菜单项的状态
    如果不用UPDATE_COMMAND_UI,你想一下你如何实现在我点
    文件菜单,但是文件菜单的菜单项没有弹出来之前改变
    ”打开“菜单项为灰色???例子就是。假如有个菜单,里面有个菜单项叫ID_MEMU1,我现在要实现
    当GetCurrentTime()返回的时间中,分钟值为偶数时让ID_MEMU1无效,
    如12:30:10无效12.31.10有效,,,
    可以响应UPDATE_COMMAND_UI消息
    在消息函数中写
    {
     int m;//当分时间的分
     //得到时间,并把分数赋给m
     //.........
     if(m%2 == 0)//偶数
     pCmdUI->Enable(false);
    else
     pCmdUI->Enable(true);
    }反正通过这个消息你可以动态设置菜单的状态
    不过工具栏上按钮的状态是在消息循环有空的时候设置,不是象菜单一样在
    弹出时设置