天天看点

window程序设计笔记 第三章 窗口和消息

第三章 窗口和消息

窗口创建的四个步骤

设计窗口

注册窗口

创建窗口

显示和更新窗口

LoadIcon() 在取得预定义图示的句柄,可以将第一个参数设定为NULL。在加载自定义图标是,这个参数应该被设定为执行实体句柄。 

Typedef stuct tagMSG

{

 HWND hwnd;//接收消息的窗口

 UINT message;//接收到的消息ID

 WPARAM wParam;

 LPARAM lParam;

 DWORD time;//消息放入消息队列中的时间

 POINT pt;//消息放入消息队列时的鼠标坐标

}

MSG,*PMSG

只要从消息队列中取出消息的message字段不为WM_QUIT,GetMessage就传回一个非零值。WM_QUIT消息导致GetMessage传回0。

TranslateMessage(&msg);//将msg结构传给windows,进行一些键盘转换。

该函数将虚拟键消息转换为字符消息。字符消息被寄送到调用线程的消息队列里,当下一次线程调用函数GetMessage或

PeekMessage时被读出。

DispatchMessage(&msg);//又将msg结构回传给windows。

该函数分发一个消息给窗口程序,通常消息从GetMessage函数获得。消息被分发到回调函数,作用是消息传递给操作系统,然后操作系统去调用我们的回调函数。

处理完消息之后,wndproc传回windows,此时,windows还停留在DispatchMessage中。

WM_PAINT

在移动窗口以致其相互重叠时,windows不保存一个窗口中被另一个窗口所掩盖的内容,在这一部分不在被遮盖之后,它就被标志为无效。窗口消息处理程序接收到一条WM_PAINT消息,以更新窗口内容。

该消息是一个无效区域变得有效。

对于WM_PAINT的处理几乎总是从一个BeginPaint开始,EndPaint结束。 

队列化消息与非队列化消息

队列化的消息被发送给消息队列,而非队列化的消息则发送给窗口消息处理程序。