窗口创建步骤
1、设计窗口类
2、注册窗口类
3、创建窗口
4、显示及更新窗口
①设计窗口
typedef struct _WNDCLASS{
UNIT style; //CS_ 窗口类型 窗口发生变化CS_HRESRAW | CS_VREDRAW
WNDPROC lpfnWndProc; //窗口过程函数(回调函数)
int cbClsExtra; //类附加内存空间 = 0
int cbWndExtra; //窗口附加内存 = 0
HINSTANCE hInstance; //该窗口所属实例
HICON hIcon; //常用LoadIcon(hInstance,lpIcomName)设置图标,标准图标//hInstance为空,lpIcomName如设置为IDI_APPLICATION,IDI_ERROR
HCURSOR hCursor; //常用LoadCursor(hInstance,lpIcomName)如(NULL,IDC_ARROW)
HBRUSH hbrBackground; //HGDIOBJ GetStockObject(int fnObject)获取一个画刷句柄,//可以获得笔、画刷(WHITE_BRUSH | DKGRAY_BRUSH)、字体、调色板 需要类型转换
LPCTSTR lpszMenuName; //菜单名
LPCTSTR lpszClassName; //给该窗口起个类名
}WNDCLASS;
②RegisterClass(&wndclass)
③创建窗口
HWND CreateWindow(
LPCTSTR lpClassName, //注册窗口类名
LPCTSTR lpWindowName, //窗口标题
DWORD dwStyle, //窗口标题栏、边框属性选择
int x, //初始化x-postion
int y, //初始化y-postion
int nWidth, //初始化宽度
int nHeight, //高度
HWND hWndParent, //父窗口
HMENU hMenu, //菜单句柄
HANDLE hInstance, //所属应用实例
PVOID lpParam //设置为空
);
HWND hwnd;
hwnd = CreateWindow(...);
④显示窗口ShowWindow(,)
⑤UpdateWindow()
窗口类型变量
应用程序经常使用一类变量,该类变量每一位表示某一种特性。1表示有这种特性,0表示没有。通常每一位不利于记忆,对每一位表示的特征定义宏,宏表示的只有相应一位为1,其他为0.如CS_VREDRAW =0x0001 CS_HREDRAW = 0x0002 CS_DBCLKS = 0x0008
如果想具有几种特征:style =CS_VREDRAW | CS_HREDRAW | CS_NOCLOSE
如果取消某种特征:style & ~CS_NOCLOSE
关于窗口过程函数
lpfnWndProc指定窗口回调函数地址,用来处理消息。调用过程由os来完成,回调地址由应用程序指定及消息处理函数指定和编写 每种窗口有自己专用的回调函数
消息循环
while(getMessage(&msg,null,0,0))
{
transmessage(&msg); //装换消息,比如KEYUP 、KEYDOWN转换WM_CHAR
Dispatchmessage(&msg); //投递消息到消息队列
}