MFC中視窗的建立及子類化過程

2021-05-24 07:09:06 字數 715 閱讀 7219

通常情況下視窗是由使用者建立的 cwnd::create(..)

●在此流程中,mfc提供乙個機會"precreatewindow()供使用者在建立前作點手腳,如修改一下視窗樣式等。

而對於對話方塊等,視窗是通過subclass方式交給使用者的:

1.系統讀入對話方塊模板,建立其中各個子視窗

2.然後將各子視窗的 訊息處理函式替換成 對應的c++物件 的訊息處理函式 (subclass:子類化,或"接管") ,然後,這個子視窗就會按類中定義的方式來動作了。

在此過程中,呼叫的是cwnd:subclasswindow( hwnd hwnd );

(視窗的子類化,就是乙個處理視窗函式的過程——mfc中所有視窗(hwnd)共用乙個視窗函式,在處理訊息時,由這個視窗函式根據視窗控制代碼,查詢這個視窗對應的cwnd派生類例項,再通過訊息對映這個視窗類的訊息處理函式進行處理。)

●在此流程中,mfc提供乙個機會"presubclasswindow" 供使用者在關聯前作點手腳

具體來說,如果你定義乙個視窗(如cbutton派生類cmybutton),然後使用對話方塊資料交換將乙個按鈕與自己的派生類物件關聯,這時候,一些"建立前"的處理就應該寫在"presubclasswindow"中。

如果你用的不是"對話方塊資料關聯",而是在oninitdialg中自己建立m_mybtn.create(...)

這時候,一些"建立前"的處理就應該寫在"precreatewindow"中。

視窗的子類化與超類化

1.子類化 改變乙個已經存在的視窗例項的性質 訊息處理與其他例項屬性。在sdk程式設計範疇內,子類化就是改變乙個視窗例項的視窗函式 通過getwindowlong 和setwindowlong 子類化所要做的就是為某視窗例項編寫新的視窗函式。其操作是在例項級別上進行的。在mfc中子類化的情況有所不同...

視窗的子類化與超類化

視窗的子類化與超類化 1.子類化 改變乙個已經存在的視窗例項的性質 訊息處理與其他例項屬性。在sdk程式設計範疇內,子類化就是改變乙個視窗例項的視窗函式 通過getwindowlong 和setwindowlong 子類化所要做的就是為某視窗例項編寫新的視窗函式。其操作是在例項級別上進行的。在mfc...

視窗的子類化(收藏)

視窗子類化技術最大的特點就是能夠擷取 windows 的訊息。一旦使用者自定義的視窗函式擷取了傳向原視窗函式的訊息,就可以對被擷取的訊息進行如下處理 將其傳給原來的視窗函式。這是對大多數訊息應該採取的措施,因為子類通常只對原來的視窗特性作少量的改動 擷取該訊息,阻止其向原視窗函式傳送。修改該訊息,修...