MFC---如何利用選單更新機制動態更新選單
阿新 • • 發佈:2019-01-04
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);
}
}