MFC為何使用訊息對映表而不用虛函式?

2021-05-10 21:22:53 字數 792 閱讀 3228

這個問題是windows開發面試中最經常問到得問題,也是很有深度的乙個問題。

有兩個帖子對該問題討論的比較深刻:

說法一:

虛函式實現占用記憶體較大

結論,該說法不靠譜!

說法三:

為了未來的可擴充套件性。相容新的系統級的訊息。

我不是很清楚ms設計訊息對映的初衷,但是感覺它著眼點更側重於增加新訊息很容易,而不是節省記憶體。

如果我們使用虛函式機制實現,恐怕對於每個可能的訊息我們都必須在基類中定義乙個虛函式,而其首要的困難就是你無法猜測未來會出現什麼訊息,也無法確定需要定義什麼樣函式原型的虛函式。而使用訊息對映,解決這個問題則相對容易,因為這將由未來的程式設計者決定他們的訊息該如何處理。

對於系統的新增訊息,訊息對映支援起來較方便。虛函式想要支援就需要改動基類新增虛函式。

對於自定義的訊息,無論訊息對映和虛函式都可以很好的支援。

那麼虛函式方式如何支援自定義訊息?

自定義訊息是不需要加到基類的。基類可以加個虛函式,onmessage(***), 然後有自定義訊息的類實現之,用switch轉換成相應虛函式呼叫,不是自己的訊息再傳給基類。

結論:這個說法靠譜。

MFC 訊息對映表 及 相關巨集定義

mfc 中通過通過不同於sdk的switch的方法來處理windows訊息,由訊息對映表 message map 和虛函式多型來處理指定的窗體訊息 宣告乙個訊息對映表 message map 在能處理訊息的類中中新增巨集 declare message map 注 深入淺出 mfc中有更詳盡系統的概...

MFC 訊息對映表 及 相關巨集定義

mfc相關技術說明 可參閱msdn mfc tno 5 mfc 中通過通過不同於sdk的switch的方法來處理windows訊息,由訊息對映表 message map 和虛函式多型來處理指定的窗體訊息 宣告乙個訊息對映表 message map 在能處理訊息的類中中新增巨集 declare mes...

如果MFC的訊息對映表需要排序

這是今天下班前和同事討論的問題。mfc的訊息對映通過幾個簡單的巨集,對windows的訊息機制做了非常好的物件導向封裝,一時為無數c 程式設計師所模仿 當然,mfc可能也是模仿別人的 熟悉mfc訊息對映機制的人都知道,其本質無非就是把訊息和其處理函式放到乙個陣列當中,當程式接收到某訊息時,就會遍歷該...