Windows API一日一练 5 RegisterClass和RegisterClassEx函数

为了可以创建自己的窗口,就需要向
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
注册这个窗口类型。  
如果注册成功,返回这个窗口类型的标识号,可以用标识号进行创建窗口,查找窗口和注销窗口类型等等。如果失败返回的值是空,因此可以通过检查返回值为判断是否调用成功。  

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow