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後的效果如下:

發佈了24 篇原創文章 · 獲贊 7 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章