MFC应用程序中enable或disable菜单项

    在MFC应用程序中需要enable或disable菜单项时,在主菜单中调用 CMenu::EnableMenuItem不起作用......如何disable菜单项?
 
    根据以往的经验,要解决这种问题,似乎应该有一个象EnableMenuItem之类的API函数,它的功能就是enable或disable菜单项。Windows中确实有这样的函数-但不是在MFC的应用中(经测试不能达到想要的效果)。实际上,在MFC里enable或disable菜单项是通过使用ON_ UPDATE_COMMAND_UI实现的。

    一般情况下,用户界面的状态指的是按钮,菜单项等任何反映程序状态的东西。例如,如果剪贴板没有内容(一种状态),那么菜单中的粘贴(Paste)命令应该是disable的。所以说通常的用户界面(UI)指的就是程序表现的状态,同时,程序状态的改变应该在程序的菜单中反映出来。 

    MFC提供一个UI更新机制来实现这种状态的改变,其基本思路为:当用户调用一个菜单的时候,Windows发送一个WM_INITMENUPOPUP消息。MFC创建一个暂时的CCmdUI对象处理这个消息,为每一个菜单项做连续初始化并将它传递到应用程序中的对象。MFC为此调用ON_UPDATE_COMMAND_UI消息处理器更新用户界面: 
    ON_UPDATE_COMMAND_UI(ID_FOO, OnUpdateFoo)  ;


    只要用户进入包含Foo的菜单项,MFC就会调用OnUpdateFoo函数。典型的处理方法如下:
 
    void CMainFrame::OnUpdateFoo(CCmdUI* pCmdUI)
    {
        pCmdUI->SetCheck(1);    //1为enable, 0为disable;

    }

 

    3DView菜单的子菜单项disable后的效果如下:

MFC应用程序中enable或disable菜单项_第1张图片

你可能感兴趣的:(MFC编程)