由於上一章的文章中我沒有向大家介紹清楚初試化的具體實現,造成很多的讀者無法很好的理解,這是我的失誤。本人現在補上,請大家原諒。
一個Windows API程式的初始化主要分為為四個部分。1、視窗類別的定義2、視窗類別的註冊3、建立視窗執行個體4、顯示視窗
①視窗類別定義
在Windows應用程式中,視窗類別定義了視窗的形式與功能。它的定義過程通過給視窗類別資料結構WNDCLASS賦值來完成,這個資料結構包含視窗類別的各個屬性。視窗類別的定義常用到以下幾個函數,在這裡一一介紹。
1、LoadIcon函數
LoadIcon函數的作用是在應用程式中載入一個視窗表徵圖。它的原型為:
HICON LoadIcon
(
HINSTANCE hInstance, //表徵圖資源所在的模組控制代碼;
//如果使用NULL,就會使用系統預定義的表徵圖
LPCTSTR lpIconName //表徵圖資源名或系統預定義的表徵圖標識名
)
2、LoadCursor函數
LoadCursor函數作用是在應用程式中載入一個視窗游標。它的原型為:
HCURSOR LoadCursor
(
HINSTANCE hInstance,//游標資源所在的模組控制代碼;
//如果使用NULL,它就會使用系統預定義的游標
LPCTSTR lpCursorName//表徵圖資源名或系統預定義的游標標識名
)
3、GetStockObject函數
應用程式通過調用GetStockObject函數來擷取系統提供的背景刷,它的原型為:
HBRUSH GetStockObject(int nBrush);
//nBrush 為系統提供的背景刷標示名
②註冊視窗類別
Windows系統本身提供部分預定義的視窗類別,我們也可以自己定義視窗類別,視窗類別必須先註冊後使用。視窗類別註冊使用的函數是RegisterClass()實現。它的原型為:
RegisterClass(&wndclass);
//wndclass為視窗的類結構(前面第二篇文章已經介紹過了)
③建立視窗
視窗註冊之後就要把它執行個體化,簡單的說就是建立一個視窗的執行個體。它是由函數CreateWindow()實現,函數的原型為:
HWND CreateWindow
(
LPCTSTR lpszClassName,//視窗執行個體的類的名字
LPCTSTR lpszTitle, //視窗標題名
DWORD dwStyle, //新建立的視窗的樣式(後面將會詳細介紹)
int x, //視窗左上方的橫座標
int y, //視窗左上方的縱座標
int nWidth, //視窗的寬度
int nHeight, //視窗的高度
HWND hwndParent, //該視窗的父視窗的控制代碼
HMENU hMenu, //視窗主菜單控制代碼
HINSTANCE hInstance, //建立視窗的應用程式當前控制代碼
LPVOID lpParam //指向一個傳遞給視窗的參數值的指標
)
那麼視窗的樣式有哪些呢?
標識 說明
WS_BORDER 建立一般帶邊框的視窗
WS_CAPTION 建立一個帶標題列的視窗
WS_HSCROLL 建立一個帶水平捲軸的視窗
WS_MAXIMIZEBOX 建立一個帶最大化按鈕的視窗
WS_MINIMIZEBOX 建立一個帶最小化按鈕的視窗
WS_OVERLAPPED 建立一個帶邊框和標題列的視窗
WS_OVERLAPPEDWINDOW 建立一個帶邊框、標題列、系統功能表及最大化、最小化按鈕的視窗
WS_POPUP 建立一彈出式視窗
WS_POPUPWINDOW 建立一帶邊框和系統功能表的彈出式視窗
WS_SYSMENU 建立一帶系統功能表的視窗
WS_VSCROLL 建立一帶垂直捲軸的視窗
當然為了實現具有多種風格的視窗,WINAPI提供了“|”來表示並(∪)的意思。例如我們要實現一個即具有垂直捲軸又具有水平捲軸的彈出式視窗時可以輸入:WS_BSCOLL|WS_VSCROLL|WM_POPUP
④顯示視窗
以上的操作均由函數實現,顯示視窗當然也不例外。視窗類別的顯示由ShowWindow和UpdateWindow函數實現。應用程式調用ShowWindow函數在螢幕上顯示視窗,其形式為:
BOOL ShowWindow(hwnd,nCmdShow)
//其中hwnd為視窗控制代碼,nCmdShow為視窗顯示形式標識
nCmdShow共有六個可選值
標識 說明
SW_HIDE 隱藏視窗
SW_SHOWNORMAL 顯示並啟用視窗
SW_SHOWMINIMIZE 顯示並已最小化的視窗
SW_SHOWMAXIMIZE 顯示並已最大化的視窗
SW_SHOWNOACTIVE 顯示但不啟用視窗
SW_RESTORE 恢複視窗原來的位置及尺寸
在視窗顯示之後,應用程式應使用UpdateWindow函數更新並繪製使用者區,並發出WM_PAINT訊息。它的形式為:
BOOL UpdataWindow(hwnd);
//hwnd為視窗控制代碼