当前位置:首页 > windos > 正文

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