持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第21天,点击查看活动详情
创建一个窗口需要做四个步骤
1. 设计一个窗口类
在设计窗口类的时候,我们需要对窗口的特征进行描述,下面是函数的参数及其解释
typedef struct _WNDCLASS {
UINT style;// 窗口类的风格
WNDPROC lpfnWndProc;//窗口处理函数 这里是一个回调指针
int cbClsExtra;//窗口扩展指定紧随在 WNDCLASS 数据结构后分配的字节数。默认值是0
int cbWndExtra;//窗口实例扩展 指定紧随在窗口实例之后分配的字节数。默认值是0
HINSTANCE hInstance;// 标志窗口的实例化句柄
HICON hIcon;//窗口的最小化图标 标识了该窗口类的图标,这里一定是图标句柄 并且如果设为null 系统会设置一个默认的图标
HCURSOR hCursor;//窗口鼠标光标句柄
HBRUSH hbrBackground;//窗口背景色是用于绘制背景的物理刷子的句柄,或者是一个颜色的值 如果是颜色值需要转化为HBRUSH类型之一的颜色
LPCTSTR lpszMenuName;//窗口菜单
LPCTSTR lpszClassName;// 窗口类名
} WNDCLASS, *LPWNDCLASS;
参数:style 他有集中常使用的样式:
CS_HREDRAW 当窗口的宽度发生变化,会重新绘制窗口。在绘制窗口的时候,窗口的内容也会被擦除。
CS_VREDRAW 当窗口的高度发生变化是,会重新绘制整个窗口。
如果不设置这两个值,在高度或者宽度发生变化时都不会重新绘制窗口。
CS_NOCLOSE 他会对close进行禁用,因此会导致窗口没有关闭按钮(慎用)
CS_DBLCLKS 如果对窗口进行双击,会发送一个双击的信号
2. 注册窗口类
完成注册需要使用到RegisterClass函数,对这个窗口进行注册,只有在注册成功以后才能创建窗口
3. 创建窗口
HWND CreateWindow(
LPCTSTR lpClassName,
LPCTSTR lpWindowName,
DWORD dwStyle,
int x,
int y,
int nWidth,
int nHeight,
HWND hWndParent,
HMENU hMenu,
HANDLE hlnstance,
LPVOID lpParam)
lpClassName:指定窗口类的名称,此名字必须和WNDCLASS的lpszClassName成员指定的名称一样。
lpWindowName 指定窗口的名称
x y 指定的位置
nWidth nHeight 指定的宽度
hWndParent 父窗口的句柄,如果没有就设为空
4. 显示并且更新窗口
显示窗口:BOOL ShowWindow(HWND hWnd, int nCmdShow);
更新窗口:BOOL UpdateWindow (HWND hWnd);