用訊息對映處理訊息迴圈

2021-04-15 07:22:59 字數 596 閱讀 2898

為乙個vc程式新增乙個事件,那麼平台會自動生成時間處理的函式,我們只需要在裡面加**就可以了。比如新增wm_lbuttondown大家都知道windows程式是事件驅動,每乙個事件都需要乙個函式來與之對應,也就是通過訊息迴圈在訊息佇列中來檢測事件,然後通過**函式來處理這一事件。

那麼mfc是如何鏈結到這一事件的呢?它是通過訊息對映來實現的。

在每個能處理訊息的類中,定義乙個訊息和訊息響應函式的靜態對照表,叫做訊息對映表;當有訊息時,只需要查詢該對映表,通過這個訊息找到響應函式(乙個函式指標),那麼就呼叫了該訊息處理函式。

cwnd中有乙個windowproc函式,可以到wincore.cpp中找到,它是乙個虛函式。這一步涉及到較深的mfc源**,有待進一步分析。

mfc為什麼要這麼設計呢? 乙個訊息可以通過乙個個類層次向下傳遞從而找到這個響應函式,因為每個視窗都是用cwnd繼承的,這個繼承層次很深。那麼這個層次中所有的類都加上訊息處理函式, 每個子類都要重寫這個響應函式,這是不可能的。從效率方面考慮,因為cwnd中的windowproc是乙個虛函式,那麼它的子類中都必須要維護乙個虛函式表vtable,這個繼承很深,無論子類是否重寫這個虛函式,每個類都要有這個虛函式表,占用了大量的記憶體,嚴重影響了效率。

VC訊息處理之訊息對映

訊息的傳遞與傳送是windows應用程式的核心所在,任何事件的觸發與響應均要通過訊息的作用才能得以完成。在sdk程式設計中,對訊息的獲取與分發主要是 通過訊息迴圈來完成的,而在mfc程式設計中則是通過採取訊息對映的方式對其進行處理的。相比而言,這樣的處理方式要簡單許多,這也是符合物件導向程式設計中盡...

訊息和訊息處理之訊息迴圈

在win32程式設計中,訊息迴圈是相當重要的乙個概念,看似很難,但使用起來卻是非常簡單。在winmain函式的最後,有下列 while getmessage msg,null,0,0 windows應用程式可以接收以各種形式輸入的資訊,這包括鍵盤 滑鼠動作 計時器產生的訊息,也可以是其他應用程式發來...

MFC訊息對映與處理

今天我們主要了解一下mfc程式的訊息對映 mfc程式中訊息的種類 a 視窗訊息 window message 這種訊息一般與視窗的內部運作有關,如建立視窗 繪製視窗和銷毀視窗等。通常,訊息是從系統傳送到視窗,或從視窗傳送到視窗。形式通常為ww 不包括ww command 如 wm create,告訴...