利用FormView类对数据库进行操作,上面有7个按钮,如“上条记录”、“下条记录”、“删除记录”等等,而一个主菜单项中也有这7个命令,作用完全相同,状态也完全相同,所以我是在菜单的OnUpdateRecordsetFirst(CCmdUI* pCmdUI)中控制各按钮的状态的。问题:执行操作后,我不点击菜单,菜单状态也就不更新,按钮也就不更新(当然,点击菜单了,两个就同时更新了),这当然不符合要求,有没有什么命令可以调用来激发菜单更新的?等高手帮忙。

解决方案 »

  1.   

    补充一点,7个菜单项都有分别的更新函数,上面的OnUpdateRecordsetFirst(CCmdUI* pCmdUI)函数只是举一个例子
      

  2.   

    多谢cy214(我爱C++) ,我知道你的方法肯定可行,但是我想偷懒,因为7个按钮的控制都比较复杂,而且和菜单的完全一样,所以不想写第二次,所以才看看有没有人为激发菜单更新的方法,^_^
      

  3.   

    那就要SendMessage对应mfc的菜单更新的消息了
    我也不会 来学习 帮你顶
      

  4.   

    试过没有自己再写个函数去直接调用类中的cmdui更新函数 :>>
    往里传个null 反正按按钮时候也不更新对应的菜单项
    然后在菜单显示更新函数中做个条件判断 如果传进来的pCmdUI是空的话就去只做button的enable/disable
    只是临时一个想法。。
      

  5.   

    我也想用SendMessage,但是我从来没有学过C++,对这些玩意儿基本上没有什么了解,呵呵,希望有人指点指点用函数调用的方法也应该是可行的,但是每次都得调用7个更新函数,也比较麻烦,看看还有没有更省事儿的办法,呵呵,多谢了
      

  6.   

    初步确定了UPDATE_COMMAND_UI()这个宏对应的基本消息宏是WM_INITMENUPOPUP
    你可以在一个按钮中发出这样一个消息试一下
    SendMessage(WM_INITMENUPOPUP);
    不过这样应该是激活了所有菜单命令对应的UPDATE_COMMAND_UI()
    如果要指定的话就得传wParam和lParam了
    我在msdn里查的WM_INITMENUPOPUP对应的参数定义
    wParam 
    Handle to the drop-down menu or submenu. 
    lParam 
    The low-order word specifies the zero-based relative position of the menu item that opens the drop-down menu or submenu. 
    The high-order word indicates whether the drop-down menu is the window menu. If the menu is the window menu, this parameter is TRUE; otherwise, it is FALSE. 
    你先试试把所有的菜单更新激活成不成吧 我试了一下没问题
      

  7.   

    搞定!结贴,多谢cy214(我爱C++),呵呵,你比我肯钻,^_^