友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
第三电子书 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

深入浅出MFC第2版(PDF格式)-第44部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!




                  CCmdTarget::OnCmdMsg ),得到这个结果: 



                 1111    CMyWinApp 

                 111    CWinApp 

                 1    CCmdTarget 



                  万一还是没找到对应的消息, 二万五千里长征可也穷途末路了, 退回到 



                  CWnd::WindowProc,调用CWnd::DefWindowProc 。你可以想象,在真正的MFC  中 



                  这个成员函数必是调用Windows API  函数::DefWindowProc 。为了简化,我让它在 



                  Frame8  中是个空函数。 



                  故事结束! 



                  我以图3…7 表示这二万五千里长征的调用次序(call stack ),图3…8 表示这二万五千里 



                  长征的消息流动路线。 



198 


…………………………………………………………Page 261……………………………………………………………

                                                                 第3章    MFC 六大關鍵技術之模擬 



                                                                          CObject 

    AfxWndProc                                                             CObject 

     AfxWndProc 

                                                                             CCmdTarget 

                                                                               CCmdTarget 



                                                                                 CWinThread 

    AfxCallWndProc                                                                CWinThread 

     AfxCallWndProc 

                                                                                     CWinApp 

                                                                                      CWinApp 



                                                                                         CMyWinApp 

                                                                                          CMyWinApp              

     CWnd::WindowProc 

     CWnd::WindowProc                                                            CWnd 

                                                                                  CWnd 



                                                                                     CView 

                                                                                      CView 



         WM_MAND             CFrameWnd::Onmand                                     CMyView 

                                 CFrameWnd::Onmand                                     CMyView               



                                                                                     CFrameWnd 

                                                                                      CFrameWnd 



        general                 CWnd::Onmand                                          CMyFrameWnd 

                                 CWnd::Onmand                                          CMyFrameWnd            

        Windows  

                                                                                 CDocument 

        message                                                                   CDocument 

        (WM_xxx) 

                                                                                     CMyDoc 

                                        CFrameWnd::OnCmdMsg                           CMyDoc                     



                                  or         CView::OnCmdMsg 

AFX_MSGMAP* pMessageMap =                    CWnd::OnCmdMsg  ………》 CCmdTarget::OnCmdMsg                 

 AFX_MSGMAP* pMessageMap =  

                       GetMessageMap();      CWinApp::OnCmdMsg ………》 CCmdTarget::OnCmdMsg  

                        GetMessageMap(); 



for(; pMessageMap != NULL;。。。)          CView::OnCmdMsg 

 for(; pMessageMap != NULL;。。。)          CView::OnCmdMsg 

{  。。。  } 

 {  。。。  } 

                                  or         CWnd::OnCmdMsg ………》 CCmdTarget::OnCmdMsg               

                                             CDocument::OnCmdMsg 



                                        CDocument::OnCmdMsg 

                                         CDocument::OnCmdMsg 

                                  or 

                                             CCmdTarget::OnCmdMsg ………》 CCmdTarget::OnCmdMsg  



                                        CCmdTarget::OnCmdMsg(。。。) 

                                         CCmdTarget::OnCmdMsg(。。。) 

                                             // walking the message map。 

                                              // walking the message map。 

                                             AFX_MSGMAP* pMessageMap = GetMessageMap(); 

                                              AFX_MSGMAP* pMessageMap = GetMessageMap(); 

                                             for(; pMessageMap != NULL;。。。)  { 。。。 } 

                                              for(; pMessageMap != NULL;。。。)  { 。。。 } 



  图3…7 当CMyFrameWnd 对象获得一个WM_MAND,所引起的Frame8 



            函数调用次序。 



                                                                                                               199 


…………………………………………………………Page 262……………………………………………………………

                     第篇  勿在浮砂築高台 



                      CObject                                       CObject 

                       CObject                                       CObject 



                          CCmdTarget                                    CCmdTarget 

                           CCmdTarget                                   CCmdTarget 



                              CWinThread                                   CWinThread 

                              CWinThread                                    CWinThread 



                                 CWinApp                                       CWinApp 

                                  CWinApp                                       CWinApp 



                                     CMyWinApp                                    CMyWinApp 

                                     CMyWinApp                                     CMyWinApp 



                              CWnd                                         CWnd 

                              CWnd                                          CWnd 



                                 CView                                         CView 

                                  CView                                         CView 



                                     CMyView                                      CMyView 

                                     CMyView                                      CMyView 



                                 CFrameWnd                                     CFrameWnd 

                                  CFrameWnd                                     CFrameWnd 



                                     CMyFrameWnd                                  CMyFrameWnd 

                                     CMyFrameWnd                                   CMyFrameWnd 



                              CDocument                                    CDocument 

                              CDocument                                     CDocument 



                                 CMyDoc                                        CMyDoc 

                                  CMyDoc                                        CMyDoc                  



                      CObject                                       CObject 

                       CObject                                       CObject 



                          CCmdTarget                                    CCmdTarget 

                           CCmdTarget                                   CCmdTarget 



                              CWinThread                                   CWinThread 

                              CWinThread                                    CWinThread 



                                 CWinApp                                       CWinApp 

                                  CWinApp                                       CWinApp 



                                     CMyWinApp                                    CMyWinApp 

                                     CMyWinApp                                     CMyWinApp              



                              CWnd                                         CWnd 

                              CWnd                                          CWnd 



                                 CView                                         CView 

                                  CView                                         CView 



                                     CMyView                                      CMyView 

                                     CMyView                                       CMyView 



                                 CFrameWnd                                     CFrameWnd 

                                  CFrameWnd                                     CFrameWnd 



                                     CMyFrameWnd                                  CMyFrameWnd 

                                     CMyFrameWnd                                  CMyFrameWnd 



                              CDocument                                    CDocument 

                              CDocument                                     CDocument 



                                 CMyDoc                                        CMyDoc 

                                  CMyDoc                                        CMyDoc 



                              图3…8 当CMyFrameWnd 对象获得一个WM_MAND,所引起的消息流动路线。 



200 


…………………………………………………………Page 263……………………………………………………………

                                                 第3章    MFC 六大關鍵技術之模擬 



Frame8 测试四种情况:分别从frame 对象和view 对象中推动消息,消息分一般 



Windows 消息和WM_MAND 两种: 



// test Message Routing 

AfxWndProc(0; WM_CREATE; 0; 0; pMyFrame); 

AfxWndProc(0; WM_PAINT; 0; 0; pMyView); 

AfxWndProc(0; WM_MAND; 0; 0; pMyView); 

AfxWndProc(0; WM_MAND; 0; 0; pMyFrame); 



 Frame8  的命令列编译联结动作是(环境变量必须先设定好,请参考第4章的「安装与设 



 定」一节): 



    cl my。cpp mfc。cpp   



 以下是Frame8  的执行结果: 



     CWinApp::InitApplication 

     CMyWinApp::InitInstance 

     CFrameWnd::Create 

     CWnd::CreateEx 

     CFrameWnd::PreCreateWindow 

     CWinApp::Run 

     CWinThread::Run 



     pMyFrame received a WM_CREATE; routing path and call stack: 

     AfxWndProc() 

     AfxCallWndProc() 

     CWnd::WindowProc() 

     1211    CMyFrameWnd 

     121    CFrameWnd 

     12    CWnd 

     1    CCmdTarget 



     pMyView received a WM_PAINT; routing path and call stack: 

     AfxWndProc() 

     AfxCallWndProc() 

     CWnd::WindowProc() 

     1221    CMyView 

     122    CView 

     12    CWnd 

     1    CCmdTarget 



     pMyView received a WM_MAND; routing path and call stack: 

     AfxWndProc() 



       
返回目录 上一页 下一页 回到顶部 0 0
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!