1,在简单的hellowin(一个具有最小化,最大化,关闭的窗体结构)程序中简述的一个简单的win窗口程序的机制,简略概述:
a,结构,具有如下4个:
MSG 信息结构
WNDCLASS 窗口类结构
PAINTSTRUCT 绘图结构
RECT 矩形结构
b,句柄名具有如下3个:
HINSTANCE 实例(程序自身)句柄
HWND 窗口句柄
HDC 设备描述表句柄
c,在一个窗口程序中,我们第一步就是要注册窗口类,在实际注册前需做点准备工作:也就是有几个结构,有几个句柄需要使用。
在单单绘制一个窗口时我们需要结构(MSG、WNDCLASS);句柄(HWND)
接着就是需要初始化结构和句柄,但是结构是在注册窗口前需要初始化的(WNDCLASS),句柄在注册窗口之后初始化,信息(MSG)的初始化在句柄之后。
c1, WNDCLASS结构的初始化: 顾名思义是为一个结构体初始化参数。有10个域。
10个域分别代表:style样式【预处理定义了8进制的辨识码】、inpfWndProc窗口类窗口过程设置【也就是在窗口发生了动作后找谁处理,就找这个属性值的函数去处理】、cbClsExtra,cbWndExtra窗口结构中的预留空间【类似边框向内缩多少像素的意思】、hInstance句柄【也就是程序自身】、hIcon图标、hCursor鼠标句柄【通过函数赋值使鼠标进入窗口区域后变成箭头】、hbrBackground背景色【背景刷子】、IpszMenuName窗口菜单、IpseClassName类名。
c2,接下来注册窗口类:
RegisterClass函数接收一个WNDCLASS的引用。成功后进行窗口创建
d, 接着创建窗口,也就是对HWND句柄的初始化:
CreateWindow()函数有11个参数。分别为szAppName注册的窗口类名、TEXT标题栏显示【text用于文本显示】、style、x【窗口位置】、y【窗口位置】、x size【窗口大小】、y size【窗口大小】、父窗口句柄、菜单栏句柄、实例【自身】句柄、创建参数。
e,显示窗口:
ShowWindow(hwnd句柄,iCmdShow)第一个参数是创建窗口的句柄,第二个是窗口显示的方式,是最大化,最小化,还是普通。 如果你定了普通显示 那么窗口会被WNDCLASS初始化的背景刷子覆盖,所以需要UpdateWindow(hwnd句柄)把窗口移上来一层。
f,信息循环:也就是说,对在窗口区域内的所有操作程序是通过信息循环来完成的。
这个时候我们的MSG结构来了。通过GetMessage(&msg,null,0,0)函数,通过TrasnlateMessage(&msg)传送消息到队列。通过DispatchMessage(&msg)取出一个消息处理。那么处理完一个信息后怎么在回到开始出,调用和接收新一个信息呢,这个时候就有一个叫窗口过程的东西,通过一个callback函数实现回调过程。如果要中断消息的话只要让消息返回0就ok,怎么做呢?关闭窗口就会触发消息返回0.当然也是通过MSG的消息循环做到的。