WINDOWS程序設計(003)----窗口類的註冊

應該結合(002)中的程序例子好好地理解,有十分大的幫助.
連接:WINDOWS程序設計(002)—-HELLOWIN程序(源代碼及詳細解析) WINDOWS程序原理html

1.WNDCLASS類型結構的定義

  在WinMain中,咱們一般用以下形式定義一個WNDCLASS類型的結構.(定義方式參考後面的附表)
  
  而後對該結構的10個字段進行初始化,並調用RegisterClass函數.小程序

  在WNDCLASS結構中,兩個最重要的字段是第二個字段和最後一個字段.
  第二個字段(lpfnWndProc)是用於基於該窗口類的全部窗口過程的地址.在HELLOWIN中,該窗口過程就是WndProc.
  最後一個字段是窗口類的名稱,容許用戶任意命名.當程序只建立一個窗口時,窗口類的名稱一般與程序名相同.
  
  另外幾個字段描述了窗口類的其餘一些特性.下面考察WNDCLASS結構的每一個字段.函數

(1) style

  如下語句用C語言的按位亦或運算符,組合了兩個32位的」類風格」(class style)的標識符:
  
  在頭文件WINUSER.H中,全部前綴爲CS的標識符定義以下:設計

  這種方式定義的標識符經常被稱爲」位標記「(bit flag),由於每一個標識符都只能影響複合值的一位.在這些類風格中,只有少數會被常常使用.程序HELLOWIN使用了兩個標識符,以指定不管什麼時候窗口的水平尺寸(CS_HREDRAW)或垂直尺寸(CS_VREDRAW)被改變,全部基於該窗口類的窗口都將被從新繪製.在調整HELLOWIN的窗口尺寸時,能夠發現,文本字符串被從新繪製在窗口新的中心位置上.真是這兩個標識符確保了這種結果.稍後咱們將瞭解窗口尺寸的變化是如何通知給窗口過程的.指針

(2) lpfnWndProc

  對於WNDCLASS結構中的第二個字段,初始化語句以下:
  
  該語句將該窗口的窗口過程設爲WndProc函數,即HELLOWIN.C中的第二個函數.這個函數將處理傳遞給全部的基於該窗口類建立的窗口的全部消息.在C語言中,當在語句中按這種方式使用函數名時,咱們引用的其實是指向函數的指針.code

(3&4) cbClsExtra & cbWndExtra

  下面兩個字段用於在類結構和Windows內部維護的窗口結構中預留一些額外的空間:
  
  
  應用程序能夠根據須要來使用這些額外的空間.HELLOWIN中沒有用到這個特性,所以將這兩個參數覆位0.不然,正如匈牙利標記法所表示的,這些字段能夠被設爲一個」字節數」.htm

(5) hInstance

  接下來的字段表示應用程序的實例句柄(是WinMain的一個參數):
  字符串

(6) hIcon

  下面的語句爲全部的基於該窗口類的窗口設定一個圖標:
  
  IDI表示」圖標的標識符」(ID for an icon).
  HICON,表示」圖標的句柄」(handle to an icon).get

(7) hCursor

  
  LoadCursor函數載入一個預約義的鼠標指針(稱爲IDC_ARROW),並返回指針的句柄.該句柄被用來設定WNDCLASS結構的hCursor字段.當鼠標指針出如今這類窗口的客戶區內時,將變成一個小箭頭.it

(8) hbrBackground

  下一個字段爲窗口的客戶區指定了背景色.字段名hbrBackground的前綴hbr表示」畫刷的句柄」(handle to a brush).畫刷是一個圖形學術語,表示用於區域填充的像素着色模式.Windows有幾個標準的畫刷,又稱爲」庫存」畫刷.下面對GetStockObject的調用返回一個白色畫刷的句柄:
  
  這意味着窗口客戶區的背景將被填充爲白色.

(9) lpszMenuName

  接下來一個字段指定了窗口類的菜單.因爲HELLOWIN不帶任何菜單,因此該字段被設爲NULL:
  

(10) lpszClassName

  最後,必須爲窗口類賦予一個名稱.對於一個小程序來講,這個名稱能夠簡單地利用程序名錶示,如保存在變量szAppName中的字符串」HelloWin」:
  
  這個字符串既能夠由ASCII字符組成,也能夠由Unicode字符組成,美文的英文具體取決於UNICODE標識符是否已經被定義.

當WNDCLASS結構的全部10個字段完成初始化以後,程序HELLOWIN調用函數RegisterClass來完成該窗口類的註冊.該函數的惟一參數就是一個指向WNDCLASS結構的指針.

2.附表

ASCII版本WNDSLASSA:

  該結構的Unicode版本定義以下:

  頭文件WINUSER.H在定義了WNDCLASSA和WNDCLASSW結構以後(另外還定義了指向這些結構的指針),又基於UNICODE標識符的定義定義了WNDCLASS結構和指向WNDCLASS結構的指針(將一些指針包含進來,目的是保持向後的兼容性):

書中的原話:

 在本書中,當我介紹後續結構時,將只給出這些結構在功能上等效的定義,例如對WNDCLASS來講.其等效的定義以下:

同時,我也放寬了各類指針的定義.相信你也絕對不會在代碼中亂堆一些LP和NP爲首的變量類型.

《Windows程序設計 第五版 珍藏版》  
相關文章
相關標籤/搜索