亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mfc

?? 很好的MFC書籍
??
?? 第 1 頁 / 共 5 頁
字號:
  <LI><A name=_Toc445889008></A><A name=_Toc445782411></A>DECLARE_MESSAGE_MAP宏: 
  <P></P>
  <P align=justify>首先,看DECLARE_MESSAGE_MAP宏的內容:</P>
  <P align=justify>#ifdef _AFXDLL</P>
  <P align=justify>#define<B> DECLARE_MESSAGE_MAP</B>() \</P>
  <P align=justify>private: \</P>
  <P align=justify>static const AFX_MSGMAP_ENTRY _messageEntries[]; \</P>
  <P align=justify>protected: \</P>
  <P align=justify>static AFX_DATA const AFX_MSGMAP messageMap; \</P>
  <P align=justify>static const AFX_MSGMAP* PASCAL _GetBaseMessageMap(); \</P>
  <P align=justify>virtual const AFX_MSGMAP* GetMessageMap() const; \</P>
  <P align=justify></P>
  <P align=justify>#else</P>
  <P align=justify>#define <B>DECLARE_MESSAGE_MAP</B>() \</P>
  <P align=justify>private: \</P>
  <P align=justify>static const AFX_MSGMAP_ENTRY _messageEntries[]; \</P>
  <P align=justify>protected: \</P>
  <P align=justify>static AFX_DATA const AFX_MSGMAP messageMap; \</P>
  <P align=justify>virtual const AFX_MSGMAP* GetMessageMap() const; \</P>
  <P align=justify></P>
  <P align=justify>#endif</P>
  <P align=justify>DECLARE_MESSAGE_MAP定義了兩個版本,分別用于靜態或者動態鏈接到MFC DLL的情形。</P>
  <P align=justify></P>
  <LI><A name=_Toc445889009></A><A name=_Toc445782412></A>BEGIN_MESSAE_MAP宏 
  <P></P>
  <P align=justify>然后,看BEGIN_MESSAE_MAP宏的內容:</P>
  <P align=justify>#ifdef _AFXDLL</P>
  <P align=justify>#define BEGIN_MESSAGE_MAP(theClass, baseClass) \</P>
  <P align=justify>const AFX_MSGMAP* PASCAL theClass::_GetBaseMessageMap() \</P>
  <P align=justify>{ return &amp;baseClass::messageMap; } \</P>
  <P align=justify>const AFX_MSGMAP* theClass::GetMessageMap() const \</P>
  <P align=justify>{ return &amp;theClass::messageMap; } \</P>
  <P align=justify>AFX_DATADEF const AFX_MSGMAP theClass::messageMap = \</P>
  <P align=justify>{ &amp;theClass::_GetBaseMessageMap, 
  &amp;theClass::_messageEntries[0] }; \</P>
  <P align=justify>const AFX_MSGMAP_ENTRY theClass::_messageEntries[] = \</P>
  <P align=justify>{ \</P>
  <P align=justify></P>
  <P align=justify>#else</P>
  <P align=justify>#define BEGIN_MESSAGE_MAP(theClass, baseClass) \</P>
  <P align=justify>const AFX_MSGMAP* theClass::GetMessageMap() const \</P>
  <P align=justify>{ return &amp;theClass::messageMap; } \</P>
  <P align=justify>AFX_DATADEF const AFX_MSGMAP theClass::messageMap = \</P>
  <P align=justify>{ &amp;baseClass::messageMap, 
  &amp;theClass::_messageEntries[0] }; \</P>
  <P align=justify>const AFX_MSGMAP_ENTRY theClass::_messageEntries[] = \</P>
  <P align=justify>{ \</P>
  <P align=justify></P>
  <P align=justify>#endif</P>
  <P align=justify></P>
  <P align=justify>#define END_MESSAGE_MAP() \</P>
  <P align=justify>{0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 } \</P>
  <P align=justify>}; \</P>
  <P align=justify>對應地,BEGIN_MESSAGE_MAP定義了兩個版本,分別用于靜態或者動態鏈接到MFC 
  DLL的情形。END_MESSAGE_MAP相對簡單,就只有一種定義。</P>
  <P align=justify></P>
  <LI>ON_COMMAND宏 
  <P></P></LI></OL>
<P align=justify>最后,看ON_COMMAND宏的內容:</P>
<P align=justify>#define ON_COMMAND(id, memberFxn) \</P>
<P align=justify>{\</P>
<DIR>
<P align=justify>WM_COMMAND,\</P>
<P align=justify>CN_COMMAND,\</P>
<P align=justify>(WORD)id,\</P>
<P align=justify>(WORD)id,\</P>
<P align=justify>AfxSig_vv,\</P>
<P align=justify>(AFX_PMSG)memberFxn\</P></DIR>
<P align=justify>};</P>
<OL>
  <OL>
    <OL>
      <OL>
        <P align=justify>
        <LI><A name=_Toc445889010></A><A name=_Toc445782413></A><A 
        name=_Toc457298970></A><B>消息映射聲明的解釋</B> 
        <P></P></LI></OL></OL></OL></OL>
<P align=justify>在清楚了有關宏的定義之后,現在來分析它們的作用和功能。</P>
<P align=justify>消息映射聲明的實質是給所在類添加幾個靜態成員變量和靜態或虛擬函數,當然它們是與消息映射相關的變量和函數。</P>
<OL>
  <P align=justify>
  <LI>成員變量 
  <P></P></LI></OL>
<P align=justify>有兩個成員變量被添加,第一個是_messageEntries,第二個是messageMap。</P>
<UL>
  <P align=justify>
  <LI>第一個成員變量的聲明: 
  <P></P></LI></UL>
<DIR>
<P align=justify><B>AFX_MSGMAP_ENTRY _messageEntries[]</B></P></DIR>
<P align=justify>這是一個AFX_MSGMAP_ENTRY<B> 
</B>類型的數組變量,是一個靜態成員變量,用來容納類的消息映射條目。一個消息映射條目可以用AFX_MSGMAP_ENTRY結構來描述。</P>
<DIR>
<P align=justify>AFX_MSGMAP_ENTRY結構的定義如下:</P></DIR>
<P align=justify>struct AFX_MSGMAP_ENTRY</P>
<P align=justify>{</P>
<P align=justify>//Windows消息ID</P>
<P align=justify>UINT nMessage;</P>
<P align=justify>//控制消息的通知碼</P>
<P align=justify>UINT nCode;</P>
<P align=justify>//Windows Control的ID</P>
<P align=justify>UINT nID;</P>
<P align=justify>//如果是一定范圍的消息被映射,則nLastID指定其范圍</P>
<P align=justify>UINT nLastID;</P>
<P align=justify></P>
<P align=justify>UINT nSig;//消息的動作標識</P>
<P align=justify>//響應消息時應執行的函數(routine to call (or special value))</P>
<P align=justify>AFX_PMSG pfn; </P>
<P align=justify>};</P>
<DIR>
<P 
align=justify>從上述結構可以看出,每條映射有兩部分的內容:第一部分是關于消息ID的,包括前四個域;第二部分是關于消息對應的執行函數,包括后兩個域。</P></DIR>
<P align=justify>在上述結構的六個域中,pfn是一個指向CCmdTarger成員函數的指針。函數指針的類型定義如下:</P>
<P align=justify>typedef void (AFX_MSG_CALL CCmdTarget::*AFX_PMSG)(void);</P>
<P 
align=justify>當使用一條或者多條消息映射條目初始化消息映射數組時,各種不同類型的消息函數都被轉換成這樣的類型:不接收參數,也不返回參數的類型。因為所有可以有消息映射的類都是從CCmdTarge派生的,所以可以實現這樣的轉換。</P>
<P 
align=justify>nSig是一個標識變量,用來標識不同原型的消息處理函數,每一個不同原型的消息處理函數對應一個不同的nSig。在消息分發時,MFC內部根據nSig把消息派發給對應的成員函數處理,實際上,就是根據nSig的值把pfn還原成相應類型的消息處理函數并執行它。</P>
<P align=justify></P>
<UL>
  <P align=justify>
  <LI>第二個成員變量的聲明 
  <P></P></LI></UL>
<P align=justify><B>AFX_MSGMAP messageMap;</B></P>
<P 
align=justify>這是一個AFX_MSGMAP類型的靜態成員變量,從其類型名稱和變量名稱可以猜出,它是一個包含了消息映射信息的變量。的確,它把消息映射的信息(消息映射數組)和相關函數打包在一起,也就是說,得到了一個消息處理類的該變量,就得到了它全部的消息映射數據和功能。AFX_MSGMAP結構的定義如下:</P>
<P align=justify>struct AFX_MSGMAP</P>
<P align=justify>{</P>
<P align=justify>//得到基類的消息映射入口地址的數據或者函數</P>
<P align=justify>#ifdef _AFXDLL</P>
<P align=justify>//pfnGetBaseMap指向_GetBaseMessageMap函數</P>
<P align=justify>const AFX_MSGMAP* (PASCAL* pfnGetBaseMap)();</P>
<P align=justify>#else</P>
<P align=justify>//pBaseMap保存基類消息映射入口_messageEntries的地址</P>
<P align=justify>const AFX_MSGMAP* pBaseMap;</P>
<P align=justify>#endif</P>
<P align=justify>//lpEntries保存消息映射入口_messageEntries的地址</P>
<P align=justify>const AFX_MSGMAP_ENTRY* lpEntries;</P>
<P align=justify>};</P>
<P 
align=justify>從上面的定義可以看出,通過messageMap可以得到類的消息映射數組_messageEntries和函數_GetBaseMessageMap的地址(不使用MFC 
DLL時,是基類消息映射數組的地址)。</P>
<P align=justify></P>
<OL>
  <P align=justify>
  <LI><B>成員函數</B> 
  <P></P></LI></OL>
<UL>
  <P align=justify>
  <LI>_GetBaseMessageMap() 
  <P></P></LI></UL>
<P align=justify>用來得到基類消息映射的函數。</P>
<P align=justify></P>
<UL>
  <P align=justify>
  <LI>GetMessageMap() 
  <P></P></LI></UL>
<P align=justify>用來得到自身消息映射的函數。</P>
<OL>
  <OL>
    <OL>
      <OL>
        <P align=justify>
        <LI><A name=_Toc445889011></A><A name=_Toc445782414></A><A 
        name=_Toc457298971></A><B>消息映射實現的解釋</B> 
        <P></P></LI></OL></OL></OL></OL>
<P 
align=justify>消息映射實現的實質是初始化聲明中定義的靜態成員函數_messageEntries和messageMap,實現所聲明的靜態或虛擬函數GetMessageMap、_GetBaseMessageMap。</P>
<P 
align=justify>這樣,在進入WinMain函數之前,每個可以響應消息的MFC類都生成了一個消息映射表,程序運行時通過查詢該表判斷是否需要響應某條消息。</P>
<OL>
  <P align=justify>
  <LI>對消息映射入口表(消息映射數組)的初始化 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲影院久久精品| 精品电影一区二区| 自拍偷自拍亚洲精品播放| 丝袜亚洲另类丝袜在线| 一道本成人在线| 久久人人97超碰com| 爽爽淫人综合网网站 | 91精品1区2区| 成人欧美一区二区三区视频网页| 国产一区二区不卡| 久久九九久久九九| 国产一区二区免费在线| 久久先锋影音av鲁色资源| 日本不卡高清视频| 欧美亚洲精品一区| 亚洲一区日韩精品中文字幕| 色综合一个色综合亚洲| 日本一区二区动态图| 成人影视亚洲图片在线| 26uuu亚洲婷婷狠狠天堂| 麻豆国产一区二区| 欧美一区二区三区在线观看视频 | 国产精品丝袜91| 日本高清视频一区二区| 亚洲一区二区在线视频| 欧美人动与zoxxxx乱| 亚洲成人黄色影院| 欧美日韩精品欧美日韩精品一综合 | 国产精品久99| 欧美一级久久久久久久大片| 日产欧产美韩系列久久99| 精品久久久网站| 在线观看网站黄不卡| 日韩精品一卡二卡三卡四卡无卡| 欧美日韩免费一区二区三区| 精品亚洲免费视频| 一区二区三区四区视频精品免费| 97精品久久久久中文字幕| 亚洲第一福利视频在线| 国产亚洲欧美激情| 一本大道综合伊人精品热热| 蜜臀国产一区二区三区在线播放| 国产精品欧美极品| 日韩欧美视频在线| 欧美在线啊v一区| 国产成人精品影视| 日韩精品亚洲专区| 国产精品国产馆在线真实露脸 | eeuss影院一区二区三区| 捆绑变态av一区二区三区| 一区二区不卡在线播放| 亚洲免费观看高清完整版在线| 国产日韩精品一区| 久久久国产一区二区三区四区小说| 欧美一区二区三区日韩| 欧美精品1区2区| 欧美丰满少妇xxxxx高潮对白| 在线一区二区三区| 色老头久久综合| 欧美日韩精品综合在线| 欧美一区二区三区思思人| 91麻豆精品91久久久久久清纯| 欧美精品第1页| 精品精品国产高清a毛片牛牛| 日韩一区二区视频在线观看| xf在线a精品一区二区视频网站| 日韩欧美国产一区在线观看| 亚洲精品一区二区在线观看| 日韩无一区二区| 日韩免费高清av| 国产欧美日韩久久| 亚洲精品国产第一综合99久久 | 69堂亚洲精品首页| 亚洲精品一区二区三区在线观看 | 欧美一级理论性理论a| 国产精品久久久久一区| 亚洲小少妇裸体bbw| 久久99久久精品| 欧美亚洲一区二区在线观看| 欧美精品一区二区三区四区 | 精品午夜一区二区三区在线观看 | 韩国成人福利片在线播放| 91日韩在线专区| 日韩一区二区在线观看| 国产精品二三区| 精品一区二区三区的国产在线播放| 一本一道久久a久久精品综合蜜臀| 日韩午夜激情电影| 国产精品久久99| 韩日av一区二区| 欧美天堂一区二区三区| 国产欧美一区二区精品性| 午夜精品久久久久久久| 成人网在线免费视频| 色屁屁一区二区| 久久久三级国产网站| 亚洲精品乱码久久久久久久久 | 亚洲一区二区三区视频在线播放| 免费在线欧美视频| 欧美久久久久久久久久| 亚洲精品videosex极品| 国产精品一区二区在线观看网站| 欧美吻胸吃奶大尺度电影| 国内精品国产成人国产三级粉色| 色婷婷国产精品| 精品日韩成人av| 久久99国产精品尤物| 欧美日韩亚洲综合一区| 日韩av午夜在线观看| 日韩免费性生活视频播放| 婷婷综合久久一区二区三区| 这里只有精品视频在线观看| 亚洲地区一二三色| 精品国产乱子伦一区| 国产不卡一区视频| 亚洲欧洲综合另类在线| 欧美日本韩国一区| 美国精品在线观看| 久久精品亚洲精品国产欧美 | 91精品国产高清一区二区三区 | 国产精品久久久久四虎| 成人av资源下载| 国产欧美日韩在线观看| 国v精品久久久网| 国产女同性恋一区二区| 日本韩国欧美一区| 日本不卡一区二区三区| 日韩欧美一二三四区| 成人中文字幕合集| 蜜桃av一区二区在线观看| 欧美精品一区在线观看| 色综合色综合色综合色综合色综合 | 日本欧美加勒比视频| 中文字幕一区二区视频| 日韩免费高清视频| 欧美日韩色综合| 在线免费视频一区二区| www.在线欧美| 成人免费视频网站在线观看| 国产揄拍国内精品对白| 午夜精品久久久久久久| 日韩一区在线看| 精品欧美一区二区久久| 欧美亚洲禁片免费| 99国产精品视频免费观看| 国内成人自拍视频| 美女www一区二区| 狂野欧美性猛交blacked| 日韩不卡手机在线v区| 亚洲成人黄色影院| 亚洲午夜久久久久中文字幕久| 中文字幕第一区二区| 欧美国产综合色视频| 国产三级精品在线| 国产欧美视频一区二区| 欧美激情艳妇裸体舞| 一区免费观看视频| 日韩美女啊v在线免费观看| 久久精品欧美日韩| 国产精品久久久久久久久快鸭| 国产日韩精品久久久| 亚洲欧美日韩在线不卡| 樱花草国产18久久久久| 五月综合激情婷婷六月色窝| 开心九九激情九九欧美日韩精美视频电影| 青青青爽久久午夜综合久久午夜| 韩国成人在线视频| 99在线精品视频| 7777女厕盗摄久久久| 国产欧美日韩亚州综合| 亚洲主播在线播放| 国产揄拍国内精品对白| 在线中文字幕一区| 国产日产欧美一区| 石原莉奈在线亚洲二区| 蜜臀久久99精品久久久久久9| 国产伦理精品不卡| 色诱视频网站一区| 精品国产一区二区三区四区四| 亚洲欧洲av在线| 日本欧美加勒比视频| 色婷婷av一区二区三区软件| 日韩午夜在线影院| 亚洲午夜一区二区| 99re这里只有精品首页| 精品视频在线看| 成人免费一区二区三区视频| 麻豆精品精品国产自在97香蕉| 91视频国产资源| 国产精品久久看| 国产成人鲁色资源国产91色综| 欧美高清精品3d| 亚洲成国产人片在线观看| 色婷婷综合久色| 中文字幕在线不卡国产视频| 五月天久久比比资源色| 99精品视频中文字幕| 精品久久久久久久久久久久久久久| 久久综合成人精品亚洲另类欧美| 丝袜诱惑制服诱惑色一区在线观看|