友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

深入浅出MFC第2版(PDF格式)-第194章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




                    #0037          else 

                    #0038                  goto LDispatchRegistered; 

                    #0039      } 

                    #0040      else 

                    #0041      { 

                    #0042          // not in cache; look for it 

                    #0043          msgCache。nMsg = message; 

                    #0044          msgCache。pMessageMap = pMessageMap; 

                    #0045 

                    #0046          for (/* pMessageMap already init'ed */; pMessageMap != NULL; 

                    #0047                  pMessageMap = pMessageMap…》pBaseMap) 

                    #0048          { 

                    #0049              //利用AfxFindMessageEntry 寻找消息映射表中 

                    #0050              //对应的消息处理例程。如果找到,再依nMsg 为一般消息 

                    #0051              // (《 0xC000)或自行注册之消息(》 0xC000)分别跳到 

                    #0052              // LDispatch: 或LDispatchRegistered: 去执行。 

                    #0053 

                    #0054              // Note: catch not so mon but fatal mistake!! 

                    #0055              //      BEGIN_MESSAGE_MAP(CMyWnd; CMyWnd) 

                    #0056 

                    #0057              if (message 《 0xC000) 

                    #0058              { 



568 


…………………………………………………………Page 631……………………………………………………………

                                                        第9章   訊息映射與命令繞行   



#0059                  // constant window message 

#0060                  if ((lpEntry = AfxFindMessageEntry (pMessageMap…》lpEntries; 

#0061                      message; 0; 0)) != NULL) 

#0062                  { 

#0063                      msgCache。lpEntry = lpEntry; 

#0064                      goto LDispatch; 

#0065                  } 

#0066              } 

#0067              else 

#0068              { 

#0069                  // registered windows message 

#0070                  lpEntry = pMessageMap…》lpEntries; 

#0071                  while ((lpEntry = AfxFindMessageEntry (lpEntry; 0xC000; 0; 0)) 

#0072                      != NULL) 

#0073                  { 

#0074                      UINT* pnID = (UINT*)(lpEntry…》nSig); 

#0075                      ASSERT(*pnID 》= 0xC000); 

#0076                              // must be successfully registered 

#0077                      if (*pnID == message) 

#0078                      { 

#0079                              msgCache。lpEntry = lpEntry; 

#0080                              goto LDispatchRegistered; 

#0081                      } 

#0082                      lpEntry++;      // keep looking past this one 

#0083                  } 

#0084              } 

#0085          } 

#0086          msgCache。lpEntry = NULL; 

#0087          return FALSE; 

#0088      } 

#0089      ASSERT(FALSE);      // not reached 

#0090 

#0091  LDispatch: 

#0092      union MessageMapFunctions mmf; 

#0093      mmf。pfn = lpEntry…》pfn; 

#0094 

#0095      switch (lpEntry…》nSig) 

#0096      { 

#0097      case AfxSig_bD: 

#0098              lResult = (this…》*mmf。pfn_bD)(CDC::FromHandle((HDC)wParam)); 

#0099              break; 

#0100 

#0101      case AfxSig_bb:     // AfxSig_bb; AfxSig_bw; AfxSig_bh 

#0102              lResult = (this…》*mmf。pfn_bb)((BOOL)wParam); 

#0103              break; 

#0104 



                                                                                         569 


…………………………………………………………Page 632……………………………………………………………

                   第篇    深入  MFC  程式設計 



                   #0105      case AfxSig_bWww:   // really AfxSig_bWiw 

                   #0106              lResult = (this…》*mmf。pfn_bWww)(CWnd::FromHandle((HWND)wParam); 

                   #0107                      (short)LOWORD(lParam); HIWORD(lParam)); 

                   #0108              break; 

                   #0109 

                   #0110      case AfxSig_bHELPINFO: 

                   #0111              lResult = (this…》*mmf。pfn_bHELPINFO)((HELPINFO*)lParam); 

                   #0112              break; 

                   #0113 

                   #0114      case AfxSig_is: 

                   #0115              lResult = (this…》*mmf。pfn_is)((LPTSTR)lParam); 

                   #0116              break; 

                   #0117 

                   #0118      case AfxSig_lwl: 

                   #0119              lResult = (this…》*mmf。pfn_lwl)(wParam; lParam); 

                   #0120              break; 

                   #0121 

                   #0122      case AfxSig_vv: 

                   #0123              (this…》*mmf。pfn_vv)(); 

                   #0124              break; 

                   #0125      。。。 

                   #0126      } 

                   #0127      goto LReturnTrue; 

                   #0128 

                   #0129  LDispatchRegistered:    // for registered windows messages 

                   #0130      ASSERT(message 》= 0xC000); 

                   #0131      mmf。pfn = lpEntry…》pfn; 

                   #0132      lResult = (this…》*mmf。pfn_lwl)(wParam; lParam); 

                   #0133 

                   #0134  LReturnTrue: 

                   #0135      if (pResult != NULL) 

                   #0136              *pResult = lResult; 

                   #0137      return TRUE; 

                   #0138  } 



                   #0001  AfxFindMessageEntry (const AFX_MSGMAP_ENTRY* lpEntry; 

                   #0002          UINT nMsg; UINT nCode; UINT nID) 

                   #0003  { 

                   #0004  #if defined(_M_IX86) && !defined(_AFX_PORTABLE) 

                   #0005  // 32…bit Intel 386/486 version。 

                   #0006          。。。 //以汇编语言码处理,加快速度。 

                   #0007  #else  // _AFX_PORTABLE 

                   #0008          // C version of search routine 

                   #0009          while (lpEntry…》nSig != 
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!