本篇主要是创建一个简单窗口的学习笔记,前三篇都是一个简单窗口的学习,目的就是打下基础,后面学习的更熟练。
承接上篇 Win 32 SDK 学习笔记1
一、注册窗口类
“ATOM MyRegisterClass(HINSTSNCE hInstance)”中的ATOM是无符号整数类型,参数hInstance是当前窗口的句柄,这里的关键是API函数RegisterClassEx(&wc)函数
ATOM RegisterClassEx (
CONST WNDCLASS *lpwcx
);
这个函数的参数是一个 结构体,你想要申请一个什么样的窗口,要事先设置好,然后传给这个函数。有关WNDCLASSEX的结构如下:
typedef struct {
UINT cbSize //这个结构体的长度,一般用sizeof(WNDCLASSEX)设置
UINT style //窗口式样
WNDPROC lpfnWndProc //窗口消息处理的函数名
int cbClsExtra //分配给窗口类结构之后的额外字节数,一般为0
int cbWndExtra //分配给窗口实例之后的额外字节数,一般为0
HINSTANCE hInstance //想要申请的窗口实例句柄
HICON hIcon //运行时的图标,NULL时取系统缺省图标
HCURSOR hCursor //光标
HBRUSH hbrBackground //背景
LPCTStr lpszMenuName //菜单
LPCTStr lpszClassName //窗口名
HICON hIconSm; //缩小时的图标,NULL时取系统缺省图标
} WNDCLASSEX, *PWNDCLASSEX;
窗口式样style的值可用下表的值组合起来设置,窗口处理函数名lpfnWndProc和hInstance 不能设置错。光标有2个hIcon和hIconSm,当取不到不到值时自动分配一个系统缺省值。光标hCursor可选择下面的光标ID设置到结构体中去。关于图标、背景、菜单后面有专门的章节介绍。
设置值 | 解释 |
---|---|
CS_HREDRAW | 窗口客户区宽度发生改变时重绘窗口 |
CS_VREDRAW | 窗口客户区高度发生改变时重绘窗口 |
CS_DBLCLKS | 鼠标双击时系统所发的消息 |
CS_NOCLOSE | 禁用系统菜单中的关闭命令 |
… | … |
二、初始化窗口
InitInstance()函数中,CreateWindow()函数创建一个窗口,这里说的窗口是广义的窗口,事实上按钮也是窗口,也是由这个函数创建的。其中最关键的是第三个参数,先看一下函数原型。
HWND CreateWindow (
LPCTSTR lpClassName,//窗口名
LPCTSTR lpWindowName,//窗口标题
DWORD dwStyle,//窗口式样