您的位置:首页 > 产品设计 > UI/UE

vc view doc frame和消息流向,UPDATE_COMMAND_UI

2011-11-12 13:34 459 查看
***************************************************************************************************************************************************************

对于新建的菜单的一个消息,

对于多文档的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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: