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,//初
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
