桌面上显示一个窗口的具体步骤:
(1) 注册窗口类 (RegisterClassEX)
(2) 创建窗口 (CreatWindowEX)
(3)在桌面上显示窗口 (Show Window)
(4)更新窗口客户区 (Update Window)
(5)循环接受【消息】(Messgae)
1.注册窗口类
注册窗口类函数 : RegisterClassEX (窗口类地址)
窗口类 : WNDCLASSEX 。 一个窗口包含了一个窗口的主要属性
typedef struct_WNDCLASSEX {
UINT cbSize; //窗口类结构大小
UINT style; //派生窗口的风格
WNDOROC lpfnWndProc; //窗口消息处理指针
int cbClsExtra; //
int cbWndExtra;
HANDLE hInstance; //本实例的句柄
HICON hIcon; //窗口左上角图标句柄
HCURSOR hCursor; //光标句柄
HBRUSH hbrBackground; //背景画刷的句柄
LPCTSTR lpszMenuName; //菜单名
LPCTSTR lpszClassNamel //窗口类名称
HICON hIconSm; // 小图标句柄
}WNDCLASSEX;
定义一个窗口类: WNDCLASSEX wndclass;
(1)指定窗口类风格:
wndclass.style = CS_HREDRAW|CS_VREDRAW //CS代表 class style 的意思
//如果大小改变就重画
窗口类风格可选样式::https://www.cnblogs.com/ddx-deng/p/3755825.html
(2)指定窗口消息处理函数地址
wndclass.lpfnWndProc = MainWndProc; //窗口函数指针
当窗口收到消息后指向这个函数通知应用程序。
函数原型:
LRESULT CALLBACK MainWndProc(HWND,UINT,WPAMRM,LPAMRM);
(3) 把本程序的实例句柄传给 hInstance 成员
wndclass.hInstance = hInstance;
(4)设置图标和光标
wndclass.hIcon =::LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor =::LoadCursor(NULL,IDC_ARROW);
//使用预定义的图标和光标
(5)制定窗口重画客户区时使用的画刷
wndclass.hbrBackgrond = (HBRUSH)::GetStockObject(WHITE_BRUSH);
(6)制定窗口类的名称
wndclass.lpszClassName = szClassName;
// char szClassName[] = "MainWClass";
2.创建窗口
要创建窗口,使用注册好的窗口类调用CreatWindowEX函数即可。
HWND hwnd = ::CreateWindowEX(
0, //扩展样式
szClassname,
"My frist Window !", //标题
WS_OVERLAPPEDWINODW, //窗口风格
CW_USEDEFAULT, //初始X坐标
CW_USEDEFAULT, //初始Y坐标
CW_USEDEFAULT, //宽
CW_USEDEFAULT, //高
NULL, //父窗口句柄
NULL, //菜单句柄
hInstance, //
NULL); //用户数据
第四个参数制定窗口细节,第88页有常见风格定义。
3.显示窗口
在桌面显示窗口:
ShowWindow(hwnd,nCmdShow);
其中nCmdShow是系统传递给WinMain函数的参数,可以有很多个取值
4.更新窗口
UpdateWindow(hwnd);
负责向窗口发送一个WM_PAINT的消息,来更新客户区。窗口处理函数收到WM_PAINT消息后会重画客户区