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

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

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




                 首先我把新增加的一些成员函数做个列表: 



                  类别        与消息绕行有关的成员函数                  注意 



                 none           AfxWndProc                global 



                 none           AfxCallWndProc            global 



                 CCmdTarget     OnCmdMsg                  virtual 



                 CDocument      OnCmdMsg                  virtual 



                 CWnd           WindowProc                virtual 



                                Onmand                 virtual 



                                DefWindowProc             virtual 



                 CFrameWnd      Onmand                 virtual 



                                OnCmdMsg                  virtual 



                 CView          OnCmdMsg                  virtual 



                 全域函数AfxWndProc  就是我所谓的推动引擎的起始点。它本来应该是在 



                 CWinThread::Run  中被调用,但为了实验目的,我在main  中调用它,每调用一次便推 



                 送一个消息。这个函数在MFC  中有四个参数,为了方便,我加上第五个,用以表示是 



                 谁获得消息(成为绕行的起点)。例如: 



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



                  表示pMyFrame  获得了一个WM_CREATE,而: 



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



                  表示pMyView  获得了一个WM_MAND。 



192 


…………………………………………………………Page 255……………………………………………………………

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



 下面是消息流动的过程: 



 LRESULT AfxWndProc (HWND hWnd; UINT nMsg; WPARAM wParam; LPARAM lParam; 

                   CWnd *pWnd)  // last param。 pWnd is added by JJHou。 

 { 

  cout lpEntries; 

                               printlpEntries(lpEntry); 

                       } 

                       return 0;  // J。J。Hou: if find; should call lpEntry…》pfn; 

                           //  otherwise should call DefWindowProc。 

                                   // for simplification; we just return 0。 

                    } 



                   如果消息是WM_MAND,CWnd::WindowProc 调用  Onmand 。好,注意了, 



                   这又是一个CWnd 的虚拟函数: 



                     1。 如果this 指向CMyFrameWnd 对象,那么调用的是CFrameWnd::Onmand 。 



                     2。 如果this 指向CMyView 对象,那么调用的是CView::Onmand 。而因为CView 



                       并没有改写Onmand,所以调用的其实是CWnd::Onmand 。 



                   这次可就没有殊途同归了。 



                   我们以第一种情况为例,再往下看: 



194 


…………………………………………………………Page 257……………………………………………………………

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



   BOOL CFrameWnd::Onmand(WPARAM wParam; LPARAM lParam) 

   { 

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