下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、DECLARE_MESSAGE_MAP0與消息傳遞網(wǎng)一總體結(jié)構(gòu)首先,在.h文件中:DECLARE_MESSAGE_MAP()然后在.CPP文件中:BEGIN_MESSAGE_MAP(CView,CWnd)ON_COMMAND(CViewid,0)END_MESSAGE_MAP()上面.h中的宏的聲明是:#defineDECLARE_MESSAGE_MAPstaticAFX_MSGMAP_ENTRY_messageEntries;staticAFX_MSGMAPmessageMap;virtualAFX_MSGMAP*GetMessageMap()const;該宏相當(dāng)于在類中聲明兩個static
2、數(shù)據(jù)成員和一個虛成員函數(shù)。它們的定義由.CPP中的三個宏實現(xiàn):#defineBEGIN_MESSAGE_MAP(class_name,base_class)AFX_MSGMAP*class_name:GetMessageMap()constreturn&class_name:message;AFX_MSGMAPmessageMap=&base_class:messageMap,class_name:_messageEntriesAFX_MSGMAP_ENTRY_messageEntries=#defineON_COMMAND(id,memFunc)WM_COMMAND,0,id,id,AFx_
3、sig_vv,(AFX_PMSG)memFunc,#defineEND_MESSAGE_MAP()0,0,0,0,AfxSig_end,(AFX_PMSG)0;注意這三個宏中的內(nèi)容共同完成了一個AFX_MSGMAP_ENTRY結(jié)構(gòu)體數(shù)組的填寫,其花括號上面用紅色斜體標(biāo)了出來。因此這三個宏必須連在一起調(diào)用,且前后順序必須正確??傮w來說,就是DECLARE_MESSAGE_MAP負(fù)責(zé)倆個成員變量與一個成員函數(shù)的聲明,BEGIN_MESSAGE_MAP、ON_COMMAND、END_MESSAGE_MAP、負(fù)責(zé)聲明所對應(yīng)的實現(xiàn)。二關(guān)于聲明至于其中聲明的成員變量,如下:1.AFX_MSGMAP。該結(jié)構(gòu)
4、體負(fù)責(zé)存儲兩個指針,分別指向基類的AFX_MSGMAP,以及本類的消息映射表AFX_MSGMAP_ENTRYstructAFX_MSGMAPAFX_MSGMAP*pBaseMessageMap;/仔旨向基類的本結(jié)構(gòu)。AFX_MSGMAP_ENTRY*lpEntries;/體類的消息映射表。;2消息映射表AFX_MSGMAP_ENTRY。該結(jié)構(gòu)體可以存儲一條消息的所有相關(guān)信息。在類中,使用了該結(jié)構(gòu)體類型的數(shù)組,因此本類有多少消息,就需要在數(shù)組中存多少元素。structAFX_MSGMAP_ENTRYUINTnMessage;UINTnCode;UINTnID;UINTnLastID;UINTnS
5、ig;AFX_PMSGpfn;該結(jié)構(gòu)體最后的成員AFX_PMSG也是個結(jié)構(gòu)體,其聲明如下:3函數(shù)指針typedefvoid(CCmdTarget:*AFX_PMSG)(void);很明顯,AFX_PMSG指向的函數(shù)指針是相應(yīng)消息的處理函數(shù)。當(dāng)觸發(fā)某個消息時,就會調(diào)用該消息所對應(yīng)的函數(shù)旨針。以上聲明,展開就是:ClassCView:publicCWndPublic:staticAFX_MSGMAP_ENTRY_messageEntries;staticAFX_MSGMAPmessageMap;virtualAFX_MSGMAP*GetMessageMap()const;三關(guān)于實現(xiàn)CPP中的三個宏
6、,負(fù)責(zé)對.h聲明的兩個成員變量與一個成員函數(shù)進(jìn)行實現(xiàn)。展開后:AFX_MSGMAP*class_name:GetMessageMap()constreturn&class_name:message;AFX_MSGMAPmessageMap=&base_class:messageMap,class_name:_messageEntriesAFX_MSGMAP_ENTRY_messageEntries=WM_COMMAND,0,id,id,AFx_sig_vv,(AFX_PMSG)memFunc,0,0,0,0,AfxSig_end,(AFX_PMSG)0;可見,本類中主要的數(shù)據(jù)成員只有一個,就是
7、消息映射表AFX_MSGMAP_ENTRY數(shù)組。AFX_MSGMAP的兩個成員變量,一個指向基類的AFX_MSGMAP_ENTRY,個指向本類的AFX_MSGMAP_ENTRY。而那個成員函數(shù)GetMessageMap()則是用來獲取本類的AFX_MSGMAP的。因此,若有派生關(guān)系:CCmdeTarget-CWnd-CView-CMyView則:可以通過GetMessageMap()用來獲取CMyView的AFX_MSGMAP,從而得到CMyView的AFX_MSGMAP_ENTRY和基類的AFX_MSGMAP(也就是CView的AFX_MSGMAP)。由于得到了CView的AFX_MSGMA
8、P,于是又有了CView的AFX_MSGMAP_ENTRY和基類的AFX_MSGMAP(也就是CWnd的AFX_MSGMAP)。同理,可以獲取CCmdeTarget的AFX_MSGMAP。但CCmdeTarget就是最終消息的源頭類了,不會再上溯。因此CCmdeTarget的AFX_MSGMAP需要單獨實現(xiàn)。故而,一條消息,交給一個派生類對象CMyView后,可以不斷上溯,直到到達(dá)CCmdeTarget。這,就是消息傳遞網(wǎng)。這張網(wǎng)為消息在基類與派生類之間傳遞提供了通道。但現(xiàn)在僅僅是架設(shè)了一張網(wǎng),消息進(jìn)來后,還是不能自行傳遞或流動,缺乏一個推動消息前進(jìn)的動力。該動力屬于Windows程序設(shè)計的工
9、作。特別注意,在這張網(wǎng)中,消息一定是由派生類流向基類的,縱向流動,而不能逆流(基類流向派生類)或者橫流(流向兄弟類)。對于一般的Windows消息(WM_xxx),定遵循此規(guī)則。但對于命令消息WM_COMMAND,消息流動則可能有其他路線。夾在BEGIN_MESSAGE_MAP與END_MESSAGE_MAP之間的宏,上面是ON_COMMAND。該宏的作用是將消息與消息處理函數(shù)綁定。但除了ON_COMMAND之外,還有很多其他的宏也用于這里。比如ON_WM_CREATEON_WM_LBUTTONDOWN,ON_WM_PAINT等。不同之處在于,ON_COMMAND宏可以將很多不同類型的消息與處理函
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 船閘課程設(shè)計地板計算
- 中醫(yī)執(zhí)業(yè)醫(yī)師考試-中醫(yī)基礎(chǔ)理論練習(xí)題
- 職業(yè)體驗課程設(shè)計與實施
- 藥物新劑型與新技術(shù)課程講稿2
- 藥店銷售活動課程設(shè)計
- 群樁計算 課程設(shè)計
- 自動掃雷課程設(shè)計
- 物業(yè)管理行業(yè)采購工作總結(jié)
- 2024年秋季學(xué)期新人教版地理七年級上冊課件 第三章 陸地和海洋 3.3 海陸的變遷
- 美容美發(fā)行業(yè)前臺接待總結(jié)
- 四人合伙投資協(xié)議書范本
- 成都市農(nóng)貿(mào)市場建設(shè)技術(shù)要求(2019年版)(完整版)
- 2024-2030年版中國IPVPN服務(wù)行業(yè)發(fā)展現(xiàn)狀及投資商業(yè)模式分析報告
- 【7歷期末】安徽省蕪湖市弋江區(qū)2023~2024學(xué)年七年級上學(xué)期期末考試歷史試卷(含解析)
- 北京市海淀區(qū)2021-2022學(xué)年第一學(xué)期四年級期末考試語文試卷(含答案)
- 通用電子嘉賓禮薄
- 開展創(chuàng)新型課題QC小組活動實施指導(dǎo)意見
- 胖東來超市部收銀員服務(wù)標(biāo)準(zhǔn)
- 精通版四年級下冊英語全冊教學(xué)課件(2021年春修訂)
- 中石油新員工入職登記表格模板
- DNA 親子鑒定書 范本
評論
0/150
提交評論