1、設計視窗類別。
一看到“設計”兩個字,大家肯定就會想入非非。視窗的建立過程類似於汽車的製造過程。我們在生產一個型號的汽車之前,首先要對該型號的汽車進行設計,畫出結構,設計零組件,起一個名字“奧迪A8”。完成設計後就可以按照這個型號生產汽車了。
當然,在我們設計視窗時,不像設計汽車那麼複雜,因為Windows 已經為我們定義好了一個視窗的基本屬性,我們只要進行屬性設定就可以了。要達到做填空題的效果,只能通過結構體來完成,視窗的特徵就是由WNDCLASS結構體來定義的。WNDCLASS結構
體的定義如下:
typedef struct _WNDCLASS{
UINT style; //設定視窗的樣式
WNDPROC lpfnWndProc; //“lpfnWndProc”是一個函數指標,指向視窗過程函數(一個回呼函數)。
/*在這裡寫一個小插曲,解釋一下回呼函數和視窗過程函數。回呼函數的實現機制:它不是由該函數的實現方直接調用(只是提供),而是在特定的事件或條件發生時由“另外一方”調用的,用於對該事件或條件進行響應。(1)定義函數 (2)提供函數的一方在初始化的時候,將回呼函數的函數指標註冊給調用者(通常是作業系統)。 (3)當特定的事件或是條件發生時,調用者調用函數。 視窗過程函數被調用的過程:(1)將本函數地址賦值給“lpfnWndProc”成員變數。(2)調用“RegsiterClass(&wndclass)”註冊視窗類別,讓系統獲得我們編寫的視窗過程函數的地址。(3)當應用程式接收到某一視窗的訊息時,調用DispatchMessage(&msg)將訊息回傳給系統。然後系統調用視窗過程函數對訊息進行處理。*/
int cbClsExtra; //設定類附加記憶體空間,被視窗類別的所有視窗所共用。
int cbWndExtra; //設定視窗附加記憶體,用於儲存視窗特有的資料。
HANDLE hInstance; //指定包含視窗過程的“主程式”的執行個體控制代碼
HICON hIcon; //指定視窗類別的表徵圖控制代碼。可以使用LoadIcon函數來載入一個表徵圖資源,返回系統分配給該表徵圖的控制代碼。
HCURSOR hCursor; //指定視窗類別的游標控制代碼。可以調用LoadCursor函數來載入一個游標資源,返回系統分配該游標的控制代碼。
HBBUSH hbrBackground; //指定視窗類別的背景畫刷控制代碼。可以調用GetStockObject函數來得到系統的標準畫刷。
LPCTSTR lpszMenuName; //指定菜單資源。
LPCTSSTR lpsz ClassName; //指定視窗類別的名字,就像新設計了一型號的汽車,給該型號的汽車起個名字。
} WNDCLASS;
2、註冊視窗類別
就像設計完汽車後,國家有關部門審批通過之後,該種類型的汽車才可以生產。同樣地,設計完視窗類別(WNDCLASS)後,調用RegisterClass函數對其進行註冊,然後才可以建立該類型的視窗。註冊函數原型如下:
ATOM RegisterClass(CONST WNDCLASS *lpWndClass);
3、建立視窗
用CreateWindow函數產生這種類型的視窗。
4、顯示及更新視窗
(1)調用ShowWindow函數來顯示視窗。
BOOL ShowWindow(
HWND hWnd , //視窗控制代碼
int nCmdShow //視窗顯示狀態
);
(2)調用ShowWindow函數來重新整理視窗
BOOL UpdateWindow(
HWND hWnd //建立好的表單
);
朋友,如果您有什麼真知灼見,可以加“新浪微博”/MSN哦,starrycheng@live.com,我們大家一起討論,一起研究。
最後,幫忙加一分吧,想整個空間系統。