Windows API(DAY05) 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

函数的输入参数是一个 WNDCLASSEXAWNDCLASSEXW 的指针。这里主要介绍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 // 函数: MyReg isterClass()
#003 //
#004 // 目的: 注册一个窗口类型.
#005 //
#006 // 
#007 //
#008 ATOM MyReg isterClass(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 注册这个窗口类型。

如果注册成功,返回这个窗口类型的标识号,可以用标识号进行创建窗口,查找窗口和注销窗口类型等等。如果失败返回的值是空,因此可以通过检查返回值为判断是否调用成功。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值