Windows API一日一練(5)RegisterClass和RegisterClassEx函數
來源:互聯網
上載者:User
為了可以建立自己的視窗,就需要向Windows作業系統註冊視窗類別型,以便後面建立視窗時調用。當然,如果使用Windows預先註冊的視窗是不需要註冊的。
函式宣告如下:
#if(WINVER >= 0x0400)
WINUSERAPI
ATOM
WINAPI
RegisterClassExA(
__in CONST WNDCLASSEXA *);
WINUSERAPI
ATOM
WINAPI
RegisterClassExW(
__in CONST WNDCLASSEXW *);
#ifdef UNICODE
#define RegisterClassEx RegisterClassExW
#else
#define RegisterClassEx RegisterClassExA
#endif // !UNICODE
函數的輸入參數是一個WNDCLASSEXA或WNDCLASSEXW的指標。這裡主要介紹UNICODE版本的函數定義,WNDCLASSEXW的結構定義如下:
typedef struct tagWNDCLASSEXW {
UINT cbSize;
/* Win 3.x */
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCWSTR lpszMenuName;
LPCWSTR lpszClassName;
/* Win 4.0 */
HICON hIconSm;
} WNDCLASSEXW, *PWNDCLASSEXW, NEAR *NPWNDCLASSEXW, FAR *LPWNDCLASSEXW;
cbSize是本結構的位元組大小,一般設定為sizeof(WNDCLASSEXW);
style是視窗類別型。
lpfnWndProc是視窗處理訊息的回呼函數。
cbClsExtra是視窗類別型的擴充。
cbWndExtra是視窗執行個體的擴充。
hInstance是視窗執行個體控制代碼。
hIcon是視窗表徵圖。
hCursor是視窗的游標。
hbrBackground是視窗背景顏色。
lpszMenuName是視窗菜單名稱。
lpszClassName是視窗類別型的名稱。
hIconSm是視窗小表徵圖。
調用這個函數的執行個體如下:
#001 //
#002 // 函數: MyRegisterClass()
#003 //
#004 // 目的: 註冊一個視窗類別型.
#005 //
#006 // 蔡軍生 2007/07/12
#007 //
#008 ATOM MyRegisterClass(HINSTANCE hInstance)
#009 {
#010 WNDCLASSEX wcex;
#011
#012 wcex.cbSize = sizeof(WNDCLASSEX);
#013
#014 wcex.style = CS_HREDRAW | CS_VREDRAW;
#015 wcex.lpfnWndProc = WndProc;
#016 wcex.cbClsExtra = 0;
#017 wcex.cbWndExtra = 0;
#018 wcex.hInstance = hInstance;
#019 wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_TESTWIN));
#020 wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
#021 wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
#022 wcex.lpszMenuName = MAKEINTRESOURCE(IDC_TESTWIN);
#023 wcex.lpszClassName = szWindowClass;
#024 wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
#025
#026 return RegisterClassEx(&wcex);
#027 }
第10行定義一個視窗結構的對象wcex。
第12行設定視窗結構的大小。
第14行設定視窗類別型。
第15行設定視窗訊息處理函數WndProc。
第16行設定視窗類別型的擴充為空白。
第17行設定視窗執行個體的擴充為空白。
第18行設定視窗當前執行個體控制代碼hInstance。
第19行設定視窗表徵圖。
第20行設定游標為箭頭。
第21行設定視窗背景顏色為白色。
第22行設定視窗菜單。
第23行設定視窗類別型名稱。
第24行設定視窗小表徵圖。
第26行是調用函數RegisterClassEx註冊這個視窗類別型。
如果註冊成功,返回這個視窗類別型的標識號,可以用標識號進行建立視窗,尋找視窗和登出視窗類別型等等。如果失敗返回的值是空,因此可以通過檢查傳回值為判斷是否調用成功。