关于MDI中,各个类接收到相同消息的顺序

在写MDI程序的时候,总是按照建议把菜单消息映射函数放在CxxxView类中,实际CxxDoc,CxxApp,CMainFrame,CChildFrame这五个类中都可以放置该函数,如果有两个类以上对同一个消息编写了映射函数,那么触发顺序如下:

CxxxView——〉CxxxDoc——〉CChildFrame——〉CxxxApp——〉CMainFrame

之所以所有类都可以得到该消息,是因为mfc采用了一种被称为消息链的松耦合方式进行消息传递。消息首先发送到窗口处理过程,窗口处理过程里有如下的伪码
  if( !view ->DealMessage(...) )
   {
       if( !doc->DealMessage(...) )
      {
         if( !chidframe ->DealMessage(...) )
          {
                  ......
          }
        }
   }
通过这种方式mfc把消息传递到整个应用程序的各个部分。
 

你可能感兴趣的:(DI)