關於RegisterClass和CreateWindow

RegisterClass就函數名字和其參數來解釋,中文意思是註冊窗口類別,顧名思義就是註冊一個窗口類,而CreateWindow字面上意思就是創建一個窗口。可能剛做windows開發的對着兩個函數及其之間關聯有點疑問。

  RegisterClass函數的作用是通知系統,你要定義一個新的窗體類型,然後把這個類型記錄到系統裏面,以後你就可以使用CreateWindow來創建一個基於此類型的窗體。基於此類型的窗體都具有相同的屬性,比如,背景色,光標,圖標等等。在MFC中,對於對話框而言,系統已經註冊了對話框自己的類型,因此你無需調用RegisterClass就可以使用自帶的對話框類創建模態或者非模態窗口。

  對於控件而言,系統已經註冊了對話框自己的類型,因此你也無需調用RegisterClass就可以使用CreateWindow來創建控件,而CreateWindow中的第一個參數,正是RegisterClass函數使用的WNDCLASS結構中的成員lpszClassName。
  windows控件與對話框的區別在於,對話框的窗體過程由調用程序提供,而控件的窗體過程是定義在系統中的,你必須對窗體進行子類化(所謂的子類化可以參考我前面《子類化和超類化區別》那篇文章),才能定製控件的處理消息邏輯。
  其實,說白了,早在C語言的Window編程時代,就已經支持了繼承,這爲以後的C++語言的實現奠定了基礎。RegisterClass函數的作用是定義一個窗體類,相對於C++中的class概念,而CreateWindow這個函數是定義基於這個類型的對象,相對於C++中的對象概念。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章