加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 02:34:35 所属栏目:Windows 来源:网络整理
导读:为了可以创建自己的窗口,就需要向 Windows 操作系统注册窗口类型,以便后面创建窗口时调用。当然,如果使用 Windows 预先注册的窗口是不需要注册的。 ? 函数声明如下: #if(WINVER = 0x0400) WINUSERAPI ATOM WINAPI RegisterClassExA( ??? __in CONST WNDC
为了可以创建自己的窗口,就需要向 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读