MFC訊息對映機制

2021-06-05 12:16:38 字數 2240 閱讀 1129

win32的訊息迴圈機制是:

產生的訊息交由作業系統,將其放到應用程式的訊息佇列中。應用程式通過getmessage函式從這個佇列中取出

一條訊息

,由dispatchmessage函式把訊息又交給作業系統,作業系統呼叫視窗過程函式wndproc進行處理。該函式利用switch-case結構來判斷並響應對應的訊息

mfc訊息對映機制:

具體的方法是:

在每個能接收和處理訊息的類中,定義乙個訊息和訊息函式靜態對照表,即訊息對映表。訊息和對應的訊息處理函式是指標成對出現的

,當需要處理訊息時,程式就搜尋對應的訊息靜態表,尋找是否有該訊息,判斷該類是否處理訊息。如果有,則依照靜態表找到並呼叫對應的訊息處理函式。

下面是對應的訊息響應函式的定義

1. 在對應的類的標頭檔案中定義訊息響應函式的原型,如:

// generated message map functions

protected:

//}afx_msg

declare_message_map()

declare_message_map()這個巨集之上有兩個afg-msg的注釋巨集。它們之間的3條語句的就是本標頭檔案對應的類的訊息響應函式的原型,此例中它們分別對應了(滑鼠左鍵按下、彈起和滑鼠移動)。

2. 在對應的類的原始檔中訊息對映巨集

begin_message_map(cdrawview, cview)

//}afx_msg_map

// standard printing commands

on_command(id_file_print, cview::onfileprint)

on_command(id_file_print_direct, cview::onfileprint)

on_command(id_file_print_preview, cview::onfileprintpreview)

end_message_map()

上述**中begin_message_map(cdrawview, cview)

end_message_map()之間的就是訊息對映表,它們與對應的訊息響應函式關聯起來。

3. 在相對應類原始檔中訊息響應函式的定義

在經歷了上述兩步之後,剩下的當然就是,對訊息響應函式的實現了。

總結:通過以上分析,乙個mfc訊息對映函式在程式中有三處函式實現,及用來關聯訊息和訊息響應函式的巨集

在標頭檔案中afx_msg注釋巨集之間的是訊息響應函式原型的宣告;

在原始檔中兩處:

乙個在在afx_msg_map之間注釋對映巨集,通過它把訊息和訊息響應函式關聯起來:

另乙個在原始檔中的訊息響應函式的實現**。

內部實現訊息對映的onwndmsgs函式處理訊息

首先:判斷是否有訊息響應函式。方法是:在響應視窗類中查詢所需的訊息響應函式,由於傳遞給windproc函式的是視窗類的指標,所以,onwndmsg函式到響應的標頭檔案中查詢,看看declare_message_map()之上,兩個afg-msg的注釋巨集之間是否有響應的訊息響應函式原型宣告,再到子類的原始檔中,看看begin_message_map()和

end_message_map()之間的是否有響應訊息對映巨集。

再次,有以上步驟就找到訊息響應函式,那麼接下來呼叫訊息響應函式,對訊息進行處理。

MFC訊息對映機制

一 mfc中採用的這種訊息處理機制成為 mfc訊息對映機制 乙個mfc訊息響應函式在程式中有三處相關資訊 函式原型,函式實現,關聯訊息和訊息響應函式的巨集。函式原型 標頭檔案cdrawview 兩個afx msg注釋巨集之間 訊息響應函式原型的宣告 afx msg void onlbuttondow...

MFC訊息對映機制

mfc的設計者們在設計mfc時,緊緊把握乙個目標,那就是盡可能使得mfc的 要小,速度盡可能快。為了這個目標,他們使用了許多技巧,其中很多技巧體現在巨集的運用上,實現mfc的訊息對映的機制就是其中之一。同mfc訊息對映機制有關的巨集有下面幾個 declare message map 巨集 begin...

MFC訊息對映機制

windows應用程式是訊息驅動的。在mfc 軟體開發中,介面操作或者執行緒之間通訊都會經常用到訊息,通過對訊息的處理實現相應的操作。比較典型的過程是,使用者操作視窗,然後有訊息產生,送給視窗的訊息處理函式處理,對使用者的操作做出響應。什麼是訊息 視窗訊息一般由三個部分組成 1.乙個無符號整數,是訊...