1. 程式人生 > >MFC---如何利用選單更新機制動態更新選單

MFC---如何利用選單更新機制動態更新選單

CMainFrame的m_bAutoMenuEnable

MFC的框架嚮導預設將m_ bAutoMenuEnable設定成TRUE,啟動這個更新機制,如果在CMainFrame的建構函式中初始化為false,則所有的選單都變成可用,同時不再能響應 ON_UPDATE _ COMAND _UI訊息。

範例

這個程式是這樣的,在CView類中新建一個CButton,然後在OnCreate( )中建立一個按鈕,滑鼠點選一次按鈕,則 編輯->貼上 這個選單項 變成當前狀態的相反狀態。

/*------CView  .h  file-----*/
private:
    CButton m_BtnChangePaste;

/*-----CView.cpp  file------*/
int Clessson4View::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; m_BtnChangePaste.Create(_T("show paste"),WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,CRect(20,20,110,50),this,IDC_BTN_CHANGEPASTE); /*因為如果在CMainFrame類中建立這個按鈕,使用者將無法點選到這個按鈕,所以放到CView類中*/
return 0; } /*-------resource.h-------*/ #define IDC_BTN_CHANGEPASTE 32772 /*------響應按鈕點選--------*/ public: afx_msg void OnBtnChangePaste(); ON_COMMAND(IDC_BTN_CHANGEPASTE,&Clessson4View::OnBtnChangePaste) void Clessson4View::OnBtnChangePaste()/*改變框架類的變數m_bPasteValid*/ { if ( ((CMainFrame*)GetParent())->m_bPasteValid)
{ ((CMainFrame*)GetParent())->
m_m_bPasteValid=false; } else { ((CMainFrame*)GetParent())->m_m_bPasteValid=true; } } /*----------CMainFrame---------*/ public: bool m_bSaveForValid; void CMainFrame::OnUpdateEditPaste(CCmdUI *pCmdUI) { if (m_bSaveForValid) { pCmdUI->Enable(TRUE); } else { pCmdUI->Enable(FALSE); } }