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註冊這個視窗類別型。
 
如果註冊成功,返回這個視窗類別型的標識號,可以用標識號進行建立視窗,尋找視窗和登出視窗類別型等等。如果失敗返回的值是空,因此可以通過檢查傳回值為判斷是否調用成功。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.