MFC消息映像與消息路由網(wǎng)絡(luò)構(gòu)建及仿真(圖文)_第1頁
MFC消息映像與消息路由網(wǎng)絡(luò)構(gòu)建及仿真(圖文)_第2頁
MFC消息映像與消息路由網(wǎng)絡(luò)構(gòu)建及仿真(圖文)_第3頁
MFC消息映像與消息路由網(wǎng)絡(luò)構(gòu)建及仿真(圖文)_第4頁
MFC消息映像與消息路由網(wǎng)絡(luò)構(gòu)建及仿真(圖文)_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

MFC消息映像與消息路由網(wǎng)絡(luò)構(gòu)建及仿真(圖文)介紹MFC(MicrosoftFoundationClass)是微軟公司開發(fā)的面向?qū)ο蟮腃++類庫,主要用于Windows操作系統(tǒng)上的應(yīng)用程序開發(fā),如Windows應(yīng)用程序、控制臺應(yīng)用程序和設(shè)備驅(qū)動程序等。MFC消息映像機制是MFC中最重要的機制之一,它是將Windows消息與應(yīng)用程序相關(guān)的代碼之間建立的橋梁,它起到將操作系統(tǒng)內(nèi)核消息與應(yīng)用程序的應(yīng)答動作聯(lián)系起來的作用,是MFC實現(xiàn)消息傳遞機制的基礎(chǔ)。本文主要介紹MFC消息映像機制的原理、實現(xiàn)方式以及消息路由網(wǎng)絡(luò)的構(gòu)建和仿真。一、MFC消息映像機制1.1原理在Windows操作系統(tǒng)中,應(yīng)用程序通過處理系統(tǒng)消息來響應(yīng)用戶的操作,而消息則是由Windows操作系統(tǒng)內(nèi)核接收并傳遞給應(yīng)用程序的,應(yīng)用程序通過消息隊列(MessageQueue)來接收、處理、響應(yīng)這些消息。在MFC中,針對每一個窗口和控件都有一個處理消息的函數(shù),通過這些函數(shù)來響應(yīng)Windows系統(tǒng)發(fā)送的消息。當(dāng)一個消息被發(fā)送到應(yīng)用程序時,Windows系統(tǒng)會將消息封裝成一個結(jié)構(gòu)體(MSG)并放入消息隊列中,隨后就會通知應(yīng)用程序?qū)?yīng)的窗口或控件去處理這些消息,應(yīng)用程序處理完消息后就將消息從隊列中刪除。MFC中的消息映像機制,就是在Windows系統(tǒng)將消息送到應(yīng)用程序隊列之前,在應(yīng)用程序中將消息映射到對應(yīng)的消息處理函數(shù)(MessageMapEntry)之上的過程,通俗的說,它可以決定哪些消息需要由哪些函數(shù)(包括窗口函數(shù)、普通函數(shù)、成員函數(shù))來處理。它需要做到以下兩個要點:1.必須能夠從Windows消息中分辨出屬于哪個窗口和控件的消息2.必須能夠從消息映射里邊找到對應(yīng)處理函數(shù)為了實現(xiàn)MFC消息映像機制,MFC定義了一個稱為“消息映射表”(MessageMap)的結(jié)構(gòu)體,它是將消息和對應(yīng)的處理函數(shù)關(guān)聯(lián)起來的核心,用于將用戶發(fā)送的消息映射到對應(yīng)的消息處理函數(shù)上面。1.2實現(xiàn)方式MFC消息映像機制的實現(xiàn),主要依賴于以下兩個宏:1.BEGIN_MESSAGE_MAP宏2.END_MESSAGE_MAP宏BEGIN_MESSAGE_MAP宏用于生成一個名字為messageMap的靜態(tài)數(shù)組,并將數(shù)組中所有元素全部初始化為0。END_MESSAGE_MAP宏用于在messageMap數(shù)組末尾添加一個特殊元素,表示消息映射表的結(jié)束。除了上述兩個宏之外,還可以通MFC提供的MESSAGE_MAP宏來部分自動生成消息映射表的代碼。在C++類的聲明中,通過BEGIN_MESSAGE_MAP宏來定義消息映射表。在這個宏的后面指定消息處理函數(shù)(函數(shù)名和處理函數(shù)類型),以及該處理函數(shù)要處理的消息類型。消息類型可以是Windows系統(tǒng)定義的消息,如WM_CREATE、WM_PAINT等等,也可以是自己私有的消息類型。如下面的代碼所示:```classCMyWnd:publicCWnd{public:CMyWnd();afx_msgvoidOnCreate();afx_msgvoidOnPaint();DECLARE_MESSAGE_MAP()};BEGIN_MESSAGE_MAP(CMyWnd,CWnd)ON_WM_CREATE()ON_WM_PAINT()END_MESSAGE_MAP()```在上面這個例子中,我們定義了一個名為CMyWnd的類,它有兩個消息處理函數(shù):OnCreate、OnPaint。在定義消息處理函數(shù)時,需要用到afx_msg宏來聲明這是一個MFC消息處理函數(shù)。接著,我們通過DECLARE_MESSAGE_MAP宏聲明CMyWnd類有一個消息映射表。在BEGIN_MESSAGE_MAP宏的參數(shù)中指定CMyWnd消息處理函數(shù)和所要處理的消息類型。在這個例子中,我們指定CMyWnd處理WM_CREATE和WM_PAINT兩類消息。通過上述的方式來定義CMyWnd消息映射表之后,當(dāng)Windows系統(tǒng)將消息投遞給CMyWnd類時,CMyWnd類在響應(yīng)Windows系統(tǒng)的消息時,就可以按照消息映像表中的映射規(guī)則,將該消息分派給相應(yīng)的處理函數(shù)來處理。例如,當(dāng)收到WM_CREATE消息時,就會將這個消息分派給OnCreate處理函數(shù)來處理。1.3特點MFC消息映像機制的主要特點如下:1.通過消息映射表來實現(xiàn)消息的分發(fā),從而減輕了用戶處理消息的負擔(dān)。2.可以對用戶定義的消息進行映射,從而擴展了Windows消息的處理能力。3.對于不支持對象特性的消息響應(yīng),可以使用普通函數(shù)或靜態(tài)函數(shù)來響應(yīng)。4.可以實現(xiàn)消息和響應(yīng)函數(shù)的共享,從而減少了代碼們的冗余。5.MFC框架可以自動調(diào)用消息響應(yīng)函數(shù),從而降低了開發(fā)人員的負擔(dān)。二、消息路由網(wǎng)絡(luò)2.1構(gòu)建從MFC消息映像機制中,我們可以看出MFC中每一個窗口控件都是獨立的一個對象。我們可以將整個界面看做是一個對象網(wǎng)絡(luò),每個窗口控件是一個節(jié)點,它們之間互相交互,通過設(shè)置消息響應(yīng)函數(shù)來實現(xiàn)。因此,我們可以將每個窗口控件看做是一個節(jié)點,窗口控件之間的消息傳遞就可以看做是節(jié)點之間的消息通信。如下圖所示,是一個簡單的窗口對象網(wǎng)絡(luò),共有三個窗口控件:窗口(CMyFrameWnd)、Client區(qū)域(CView)、客戶和。![image.png](/gh/suifengqjn/img/2022/09/image.png)上圖中的粗實線表示消息的路由,窗口對象(CMyFrameWnd對象)向它的子對象(ClientView和客戶端對象)發(fā)送消息,ClientView對象又將消息發(fā)送給客戶端對象。2.2仿真為了更好地理解消息路由的過程,我們可以通過仿真的方式來模擬消息的傳遞過程,實現(xiàn)窗口控件之間的相互交互。例如,我們可以模擬菜單的彈出,鼠標(biāo)移動等等操作。具體步驟如下:1.運行程序,創(chuàng)建一個窗口對象網(wǎng)絡(luò)。2.在窗口菜單中選擇某個菜單項。3.自定義菜單對象接受到菜單消息。4.響應(yīng)菜單消息,并生成彈出菜單對象。5.如果鼠標(biāo)在彈出菜單對象所在區(qū)域內(nèi),那么鼠標(biāo)移動消息就將發(fā)送給這個彈出菜單對象。在實現(xiàn)消息路由仿真時,需要重載窗口控件的消息處理函數(shù),這樣才能保障窗口控件能夠滿足自己的需要。同時,因為掌握了Windows消息的內(nèi)容和交流方式,我們才能快速專業(yè)地完成MFC程序的開發(fā),以提高軟件的效率和穩(wěn)定性。三、結(jié)論本文主要介紹了MFC消息映像機制的

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論