Windows创建窗口涉及的概念以及相关函数

一、窗口结构体WNCLASS

这个结构体存储的是一些关于窗口类信息的结构,

成员如下:

typedef struct tagWNDCLASSA {
  UINT      style;//窗口类型
  WNDPROC   lpfnWndProc;//窗口处理函数(回调函数)
  int       cbClsExtra;//窗口扩展(一般为0)
  int       cbWndExtra;//窗口实例扩展(一般为0)
  HINSTANCE hInstance;//实例句柄
  HICON     hIcon;//窗口的最小化图标
  HCURSOR   hCursor;//窗口鼠标光标
  HBRUSH    hbrBackground;//窗口背景颜色
  LPCSTR    lpszMenuName;//窗口菜单
  LPCSTR    lpszClassName;//窗口类名
} WNDCLASSA, *PWNDCLASSA, *NPWNDCLASSA, *LPWNDCLASSA;
窗口类型可选值
类风格 含义
CS_VREDRAW 移动或者调整窗口的高度(垂直方向)时,重绘整个窗口
CS_HREDRAW 移动或者调整窗口的宽度(水平方向)时,重绘整个窗口
CS_DBLCLKS 当用户光标在窗口内双击时,允许发送双击消息给窗口过程
CS_OWNDC 给予每个窗口实例分配一个唯一的 DC(注意,尽管这样是很方便,但它必须慎重使用,因为每个 DC 大约要占 800 个字节的内存)
CS_CLASSDC 该窗口类的所有窗口实例都共享一个窗口类 DC
CS_PARENTDC 1. 将子窗口的裁剪区域设置到父窗口的 DC 中去,这样子窗口便可以在父窗口上绘制自身。(注意,这是子窗口还是从系统缓存中获取 DC,而不是使用父窗口的 DC。)
2. 指定该风格可以提高系统性能
CS_NOCLOSE 禁止系统菜单的关闭选项
CS_SAVEBITS 1. 以位图形式保存被该窗口遮挡的屏幕部分,这样当给窗口移动以后,系统便可以用该保存的位图恢复屏幕移动的相应部分,从而系统不用向被该窗口遮挡的窗口发送 WM_PAINT 消息
2. 该特性对于菜单类型的窗口比较合适,因为它通常是简短的显示一下之后便消失
3. 设置该特性将增加显示该窗口的时间,因为它通常要先分配保存位图的内存
CS_BYTEALIGNCLIENT 在字节边界上(在 x 方向上)定位窗口的用户区域的位置
CS_BYTEALIGNWINDOW 在字节边界上(在 x 方向上)定位窗口的位置
CS_GLOBALCLASS 1. 当调用 CreateWindow 或 CreateWindowEx 函数来创建窗口时允许它的 hInstance 参数和注册窗口类时传递给 RegisterClass 的 hInstance 参数不同
2. 如果不指定该风格,则这两个 hInstance 必须相同

下面是我自己在程序中对窗口类信息结构体的填充,可以当做参考:

	// WNDCCASS :窗口类,用来处理窗口的某一类信息
	WNDCLASS wc;

	wc.style = CS_HREDRAW | CS_VREDRAW;
	// 回调函数
	wc.lpfnWndProc = (WNDPROC)d3d::WndProc;
	wc.cbClsExtra = 0;
	wc.cbWndExtra = 0;
	// 函数传进来的窗口的句柄
	wc.hInstance = hInstance;
	wc.hIcon = LoadIcon(0, IDI_APPLICATION);
	wc.hCursor = LoadCursor(0, IDC_ARROW);
	wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
	wc.lpszMenuName = 0;
	wc.lpszClassName = "DX9App";

二、对相关窗口进行注册

我们使用RegidsterClass函数对我们刚才填充的窗口结构进行注

	// 将窗口的信息填充完成之后,使用该函数,对窗口进行注册
	if (!RegisterClass(&wc))
	{
		::MessageBox(0, "RegisterClass() - FAILED", 0, 0);
		return false;
	}

三、注册完成之后,我们就要开始利用现有的属性进行窗口的创建,使用函数:CreateWindow

函数原型:

HWND CreateWindow(
LPCTSTR lpClassName,//窗口类的名称
LPCTSTR lpWindowName,//窗口的标题 
DWORD dwStyle,//窗口风格
int x,//初始x坐标
int y,//初
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值