由於上一章的文章中我沒有向大家介紹清楚初試化的具體實現,造成很多的讀者無法很好的理解,這是我的失誤。本人現在補上,請大家原諒。
一個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為窗口句柄