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

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

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



…………………………………………………………Page 238……………………………………………………………

                  第篇  勿在浮砂築高台 



                  }; 

                  class CFrameWnd : public CWnd 

                  { 

                  。。。 

                    DECLARE_MESSAGE_MAP() 

                  }; 

                  class CView : public CWnd 

                  { 

                  。。。 

                    DECLARE_MESSAGE_MAP() 

                  }; 

                  class CMyWinApp : public CWinApp 

                  { 

                  。。。 

                    DECLARE_MESSAGE_MAP() 

                  }; 

                  class CMyFrameWnd : public CFrameWnd 

                  { 

                  。。。 

                    DECLARE_MESSAGE_MAP() 

                  }; 

                  class CMyDoc : public CDocument 

                  { 

                  。。。 

                    DECLARE_MESSAGE_MAP() 

                  }; 

                  class CMyView : public CView 

                  { 

                  。。。 

                    DECLARE_MESSAGE_MAP() 

                  }; 



                  并且把各消息映射表的关联性架设起来,给予初值(每一个映射表都只有ON_MAND 



                  一个项目): 



                  // in implementation files 

                  BEGIN_MESSAGE_MAP(CWnd; CCmdTarget) 

                  ON_MAND(CWndid; 0) 

                  END_MESSAGE_MAP() 



                  BEGIN_MESSAGE_MAP(CFrameWnd; CWnd) 

                  ON_MAND(CFrameWndid; 0) 

                  END_MESSAGE_MAP() 



                  BEGIN_MESSAGE_MAP(CDocument; CCmdTarget) 



176 


…………………………………………………………Page 239……………………………………………………………

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



ON_MAND(CDocumentid; 0) 

END_MESSAGE_MAP() 



BEGIN_MESSAGE_MAP(CView; CWnd) 

ON_MAND(CViewid; 0) 

END_MESSAGE_MAP() 



BEGIN_MESSAGE_MAP(CWinApp; CCmdTarget) 

ON_MAND(CWinAppid; 0) 

END_MESSAGE_MAP() 



BEGIN_MESSAGE_MAP(CMyWinApp; CWinApp) 

ON_MAND(CMyWinAppid; 0) 

END_MESSAGE_MAP() 



BEGIN_MESSAGE_MAP(CMyFrameWnd; CFrameWnd) 

ON_MAND(CMyFrameWndid; 0) 

END_MESSAGE_MAP() 



BEGIN_MESSAGE_MAP(CMyDoc; CDocument) 

ON_MAND(CMyDocid; 0) 

END_MESSAGE_MAP() 



BEGIN_MESSAGE_MAP(CMyView; CView) 

ON_MAND(CMyViewid; 0) 

END_MESSAGE_MAP() 



同时也设定了消息的终极镖靶CCmdTarget  的映射表内容: 



AFX_MSGMAP CCmdTarget::messageMap = 

 { 

        NULL; 

        &CCmdTarget::_messageEntries'0' 

 }; 



AFX_MSGMAP_ENTRY CCmdTarget::_messageEntries'' = 

 { 

        { 0; 0; CCmdTargetid; 0; AfxSig_end; 0 } 

 }; 



于是,整个消息流动网就隐然成形了(图3…5 )。 



                                                                                       177 


…………………………………………………………Page 240……………………………………………………………

                           第篇  勿在浮砂築高台 



                                                    CWinThread       CWinApp        CMyWinApp 



                                                                        ; ; 111; ; ;   ; ; 1111; ; ; 



                                                                       0;0;0;0;0;0     0;0;0;0;0;0 

                                                                                                      CView         CMyView 



                                                                                                                                         m 

                                                                                                                                         e 

                             CCmdTarget               CWnd          CFrameWnd       CMyFrameWnd 

                                                                                                                                         s 

                                                                                                       ; ; 122; ; ;    ; ; 1221; ; ; 



                                                                                                       0;0;0;0;0;0    0;0;0;0;0;0        s 

                                                                                                                                         a 



                                                        ; ; 12; ; ;     ; ; 121; ; ;   ; ; 1211; ; ; 

                                  ; ; 1; ; ;                                                                                             g 

                                                       0;0;0;0;0;0     0;0;0;0;0;0     0;0;0;0;0;0 

                                0;0;0;0;0;0                                                                                              e 



                                                    CDocument      CMyDocument 



                                                        ; ; 13; ; ;     ; ; 131; ; ; 



                                                       0;0;0;0;0;0     0;0;0;0;0;0 



                                        图3…5 Frame7  程序所架构起来的消息流动网 (也就是Message Map)。 



                          为了验证整个消息映射表,我必须在映射表中做点记号,等全部构造完成之后,再一一 



                          追踪把记号显示出来。我将为每一个类别的消息映射表加上这个项目: 



                                      ON_MAND(Classid; 0) 



                          这样就可以把Classid 嵌到映射表中当作记号。正式用途(于MFC  中)当然不是这样, 



                          这只不过是权宜之计。 



                          在main  函数中,我先产生四个对象(分别是CMyWinApp、CMyFrameWnd、CMyDoc、 



                          CMyView 对象): 



                           CMyWinApp theApp; // theApp 是CMyWinApp 对象 



                           void main() 

                           { 

                               CWinApp* pApp = AfxGetApp(); 

                               pApp…》InitApplication(); 

                                pApp…》InitInstance(); // 产生CMyFrameWnd 对象 

                               pApp…》Run(); 



178 


…………………………………………………………Page 241……………………………………………………………

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



    CMyDoc* pMyDoc = new CMyDoc; // 产生CMyDoc 对象 

    CMyView* pMyView = new CMyView; // 产生CMyView 对象 

    CFrameWnd* pMyFrame = (CFrameWnd*)pApp…》m_pMainWnd; 

    。。。 

 } 



然后分别取其消息映射表,一路追踪上去,把每一个消息映射表中的类别记号打印出来: 



void main() 

 { 

 。。。 

    AFX_MSGMAP* pMessageMap = pMyView…》GetMessageMap(); 

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