据我所理解的UPDATE_COMMAND_UI只有在点击上级菜单的时候才会执行,哪有什么办法可以手动更新它么,不使用菜单的ID强制更新的办法
我现在的问题是
我我菜单是工程-》建立工程\管理工程这样的
开始都是禁用的,当我点击了建立工程,期间我将管理工程在UPDATE_COMMAND_UI之中的参数设置成了TURE可是它还是不会调用UPDATE_COMMAND_UI来更新,这样就造成了我在再次点击工程这个母菜单之前我的管理工程的快捷键失效。
也参考了前人的提问还是没有找到
至于send   message   IDL_UPDATE_COMMAND_UI 也无法理解到底怎么使用
各位达人速速救命呀
其次问个题外的问题
如何获得当前用户windows的空白的填充色,如果有别人换了颜色,偶的程序自己绘制的对话筐就回变得很难看哦。。

解决方案 »

  1.   

    期间我将管理工程在UPDATE_COMMAND_UI之中的参数设置成了TURE可是它还是不会调用UPDATE_COMMAND_UI来更新,
    ===啥意思???
      

  2.   

    在修改完菜单后调用DrawMenuBar。
      

  3.   

    UPDATE_COMMAND_UI并不是点击时才执行的。它是在Main framework空闲时就会处理菜单、工具栏等元素的状态更新。请参考这里:http://msdn.microsoft.com/en-us/magazine/cc301409.aspx
      

  4.   

    UPDATE_COMMAND_UI是在空闲期间由框架自动调用用来更新菜单状态的,无法手工调用,不过你可以把修改的菜单状态保存起来,等到下次UPDATE_COMMAND_UI被调用时用这个保存的状态来设置就行了。
      

  5.   

    你前面描述不清楚。系统的颜色可以用GetSysColor来获取。
      

  6.   

    首先感谢各位楼上的回复
    to:happyparrot
    期间我将管理工程在UPDATE_COMMAND_UI之中的参数设置成了TURE可是它还是不会调用UPDATE_COMMAND_UI来更新, 
    ===啥意思???
    if (note)
    {
      pCmdUI->Enable(ture);
    }
    else
    {
      pCmdUI->Enable(false);
    }
    中的note的值设置成ture;to:cnzdgs
    在修改完菜单后调用DrawMenuBar。
    我也试过了这个函数不知道为什么我这里DrawMenuBar是不带参数的,搜索出来的使用和MSDN上面的也是带HWND hWnd 参数的,不知道如何使用,请说仔细点可以么to:laiyiling and jameshooo
    UPDATE_COMMAND_UI并不是点击时才执行的。它是在Main framework空闲时就会处理菜单、工具栏等元素的状态更新。
    我这里貌似只有工具栏会自动更新,菜单,我的这个2级菜单似乎要我点击到上级菜单在它显示前才会调用UPDATE_COMMAND_UI
    我将断点打在UPDATE_COMMAND_UI之中没有进入,只有我点击了上级菜单才会进入
    过程也就是这样的
    开始(管理工程禁用)-》点击工程菜单之下的建立工程(此时管理工程还是禁用的)——》执行建立工程(其中将note改成了ture),这个时候管理工程在后台还是禁用的,所以我的快捷键还是无法使用的,只有在我再次点击到“工程”这个母菜单的时候才进入管理工程的UPDATE_COMMAND_UI才能把它改成可用的。
    我现在使用的办法AfxGetMainWnd()->GetMenu()->EnableMenuItem(ID_OPERATION,MF_BYCOMMAND|MF_ENABLED); 来强制改成可用,但是我觉得这样“暴力”的办法很不舒服,MFC既然有  UPDATE_COMMAND_UI来管理菜单,应该对应的措施把。to:Mackz
    thank you
      

  7.   

    CWnd类重载了DrawMenuBar函数,所以你在类的成员函数中输入DrawMenuBar是不带参数的,不过没有影响,只要调用一下就可以,如果你调用了这个函数后依然存在问题,那就说明问题的原因不在这里。
      

  8.   

    你好,我和你遇到的问题类似,我是这样解决的:
        和你一样是强制菜单显示出来AfxGetMainWnd()->GetMenu()->EnableMenuItem(ID_OPERATION,MF_BYCOMMAND ¦MF_ENABLED); 但是在我们的界面上的菜单栏还是灰色的,这时我们必须
    将鼠标放到用的菜单栏上才显示为活动的(黑色),其实这时再在强制显示出的代码后面加上AfxGetMainWnd()->DrawMenuBar();就可以了,也就是让窗体刷新一下。我也是个菜鸟,说的不好,别骂我。
      

  9.   

    有个变量是窗口自带的负责自动更新,设置为FALSE
      

  10.   

    发送WM_KICKIDLE消息应该可以更新菜单啊。