在写MDI程序的时候,总是按照建议把菜单消息映射函数放在CxxxView类中,实际CxxDoc,CxxApp,CMainFrame,CChildFrame这五个类中都可以放置该函数,如果有两个类以上对同一个消息编写了映射函数,那么触发顺序如下:
CxxxView——〉CxxxDoc——〉CChildFrame——〉CxxxApp——〉CMainFrame
之所以所有类都可以得到该消息,是因为mfc采用了一种被称为消息链的松耦合方式进行消息传递。消息首先发送到窗口处理过程,窗口处理过程里有如下的伪码
if( !view ->DealMessage(...) )
{
if( !doc->DealMessage(...) )
{
if( !chidframe ->DealMessage(...) )
{
......
}
}
}
通过这种方式mfc把消息传递到整个应用程序的各个部分。