MFC ATL視窗訊息封裝機制對比分析

2021-06-04 18:57:46 字數 696 閱讀 7648

到個人部落格閱讀

»新產品在不緊不慢的進行中,這應該是有史以來開發比較「自由」的乙個專案。在折騰完乙個功能伺服器的demo之後,開始折騰起pc客戶端。leader說客戶端介面需用atl來實現。這時候可以滿足一下客戶端介面開發的興趣,於是開始學習atl介面開發,有人說做介面是個累人加無趣的體力活,但也懂得君子善假於物的道理,於是使用了金山衛士開源中的介面庫做鋪墊。現在要討論的與介面庫無關,只討論mfc和atl對視窗訊息封裝的實現手法。一切還是從除錯原始碼過程中尋找答案,進入正題。

我們知道,乙個標準的windows應用程式的主要邏輯有:1.註冊乙個視窗類/視窗過程;2.建立該類視窗;3.顯示、啟用視窗;4.訊息迴圈;5.處理該視窗感興趣的訊息。

我們又知道,win32 api是面向過程的(雖然可以說win是乙個oo系統),而我們希望可以利用win32 api進行快樂的oop(不需要重複上面的邏輯),於是,我們需要包裝api,封裝windows視窗。從上面的邏輯可以看出,要封裝視窗主要需解決怎樣封裝視窗訊息處理機制。由於交給windows的標準視窗過程是全域性/靜態的,此時,將面臨兩個問題:

1.怎麼知道將視窗過程中的訊息**給哪個封裝好的視窗類例項?(也就是hwnd到對應視窗類例項的轉換)

2.假設第1個問題解決了,怎樣將訊息傳遞給相應視窗類的例項?

重點是解決第1個問題,下面來看mfc和atl分別是怎麼來解決這兩個問題。

由於**格式不好複製過來,請到個人部落格閱讀。

使用C 封裝視窗訊息對映

一直很想學習mfc,用來寫程式,會方便很多,有許多的現成的類庫可以使用。但是對windows的視窗訊息機制沒有熟練掌握,保是照書抄書的,是不能真正掌握mfc的設計的。加上自己的c 的水平,還是入門級別,學的不好,用mfc,其實是雲裡霧裡。瞎子摸象,最後還是不得要領。今天終於有耐心寫完自己的第乙個c ...

MFC 視窗封裝

mfc對window作了一層比較淺的封裝,其建立過程基本與sdk差不多。它簡化了視窗的註冊,並將視窗過程與類關聯起來 後者是比較重要的封裝,它使訊息能夠分流給 類的視窗過程 既而通過訊息對映,才能到達各個處理函式。使用傳統的sdk來建立乙個視窗有點繁瑣,偽 是這樣的 if registerclass...

MFC視窗訊息

mfc應用程式中處理訊息的順序 1.afxwndproc 該函式負責接收訊息,找到訊息所屬的cwnd物件,然後呼叫afxcallwndproc 2.afxcallwndproc 該函式負責儲存訊息 儲存的內容主要是訊息識別符號和訊息引數 用程式以後使用,然後呼叫windowproc 函式 3.win...