出并派送到窗口函数的消息。进队消息一般由用户操作产生,如鼠标移动、点击产生的消息,键
盘按键消息,重画窗口消息等。调用API函数PostMessage()可以派送(dispatch)一条消息到指
定窗口的消息队列,其原型如下:
BOOL WINAPI PostMessage(HWND hWnd, UINT Msg,
WPARAM wParam, LPARAM IParam) ;
其中Msg参数指定了要发送的消息值(名)。
(2)不进队消息不进入消息队列,直接发送(send)给指定窗口的窗口函数进行处理。程序
中调用某些特定的API函数会产生不进队消息。如调用CreateWindow()创建窗口时发送的
WM_CREATE 消息,调用UpdateWindow()更新窗口时发送的WM_PAINT消息以及调用
DestroyWindow()时发送的WM_DESTROY 消息都是不进队消息。
可以通过调用SendMessage()函数直接发送消息给窗口:
LRESULT WINAPI SendMessage((HWND hWnd, UINT Msg,
WPARAM wParam, LPARAM IParam) ;
有的不进队消息来自进队消息,如退出应用程序时会产生一条进队消息WM_CLOSE,消息
循环将其派送到窗口函数,处理这一条消息一般是调用DestroyWindow()函数撤销并关闭窗口,
并发送不进队消息WM_DESTROY到窗口函数。有的用户操作可能既产生进队消息,又产生不
进队消息。消息是否进入队列由Windows自行操作,程序设计人员只需要关心窗口函数的
编写。
4. 设备描述表
WM_PAINT是重画窗口客户区消息,当窗口内容被改变、移动或窗口被覆盖后,需要对窗
口进行重画,一般应用程序都需要处理这个消息,处理这一消息需要获取设备描述表句柄。
Windows的图形设备接口(GDI)是一组API函数,它提供与设备无关的图形功能,使应用程
序在不同图形设备(如打印机,显示器、绘图仪等)上进行相同的操作(调用GDI函数),而无需考
虑设备的硬件差异,设备无关性是通过设备描述表实现的。
设备描述表(device context,DC)也称为设备上下文,是GDI内部定义的一个有图形对象、图
形方式及其属性的一个数据结构,它与特定设备相关,描述了硬件设备的具体特征信息。例如,
需要执行显示任务时,就构造一个显示设备的DC,获得其句柄;需要执行打印任务时,则构造一
个打印设备的DC,获得其句柄,GDI函数以该句柄为参数完成相应的任务。与具体设备相关的
操作交给DC,将应用程序的设备无关图形功能调用转换为在设备驱动程序下执行的设备相关
操作。
应用程序不能直接访问设备描述表,为了进行图形输出,必须先获取设备描述表句柄,然后
以设备描述表句柄为参数调用GDI函数,实现图形功能。
例如,处理WM_PAINT消息时,通过以下方式获取设备描述表句柄。
WM_PAINT:
case
//窗口重画消息