vc view doc frame和消息流向,UPDATE_COMMAND_UI

来源:互联网 发布:淘宝卖家转接人工服务 编辑:程序博客网 时间:2024/04/28 00:06
***************************************************************************************************************************************************************
对于新建的菜单的一个消息,
对于多文档的IDR_xxTYPE的菜单项消息
比如ON_COMMAND(ID_test, Ontest)
首先会被view的ON_COMMAND(ID_test, Ontest这个handler拦截
再doc的
再childframe的
再app的
再mainframe的.
void CMainFrame::Ontest1() {    // TODO: Add your command handler code here        AfxMessageBox("mainframe");}void CSiiApp::Ontest1() {AfxMessageBox("app");    // TODO: Add your command handler code here    }void CChildFrame::Ontest1() {    // TODO: Add your command handler code here    AfxMessageBox("child");}void CSiiDoc::Ontest1() {    // TODO: Add your command handler code here    AfxMessageBox("doc");}void CSiiView::Ontest1() {        // TODO: Add your command handler code here    AfxMessageBox("view");}

对于多文档的IDR_MAINFRAME的菜单项消息
先被mainframe的handler拦截
再app的。

对于单文档的菜单项消息
比如 ON_COMMAND(ID_test, Ontest)
首先会被view的ON_COMMAND(ID_test, Ontest)这个handler拦截
再doc的,
再mainframe的.
再app的。
***************************************************************************************************************************************************************
对于mfc预置的菜单的一个消息,对于多文档的。深入浅出MFC p447





深入浅出MFC p726



***************************************************************************************************************************************************************
p461


***************************************************************************************************************************************************************
和界面有关的往往放在CFrameWnd中,和数据有关的可放在CDocument中,和数据的显示有关的可放在CView中
一般放在cview
***************************************************************************************************************************************************************
UPDATE_COMMAND_UI消息
每当选单被拉并尚未显示之前,其命令项(以及对应之工具栏按钮)都会收到UPDATE_COMMAND_UI讯息,一般用于改变菜单项的状态显示
void CSiiView::Ontest1() {        // TODO: Add your command handler code here    AfxMessageBox("hello");    if (m_bCheck)    {m_bCheck=0;    }     else    {m_bCheck=1;    }    }void CSiiView::OnUpdatetest1(CCmdUI* pCmdUI) {    // TODO: Add your command update UI handler code here    pCmdUI->SetCheck(m_bCheck);//  pCmdUI->Enable(0);}


原创粉丝点击