MFC消息映射详细介绍与实现

时间:2013-04-26 14:14:19
【文件属性】:

文件名称:MFC消息映射详细介绍与实现

文件大小:86KB

文件格式:DOCX

更新时间:2013-04-26 14:14:19

MFC 消息 映射

融合MFC各种消息的描叙与实现····· 消息映射的实现   Windows消息概述   Windows应用程序的输入由Windows系统以消息的形式发送给应用程序的窗口。这些窗口通过窗口过程来接收和处理消息,然后把控制返还给Windows。   消息的分类   队列消息和非队列消息   从消息的发送途径上看,消息分两种:队列消息和非队列消息。队列消息送到系统消息队列,然后到线程消息队列;非队列消息直接送给目的窗口过程。   这里,对消息队列阐述如下:   Windows维护一个系统消息队列(System message queue),每个GUI线程有一个线程消息队列(Thread message queue)。   鼠标、键盘事件由鼠标或键盘驱动程序转换成输入消息并把消息放进系统消息队列,例如WM_MOUSEMOVE、WM_LBUTTONUP、WM_KEYDOWN、WM_CHAR等等。Windows每次从系统消息队列移走一个消息,确定它是送给哪个窗口的和这个窗口是由哪个线程创建的,然后,把它放进窗口创建线程的线程消息队列。线程消息队列接收送给该线程所创建窗口的消息。线程从消息队列取出消息,通过Windows把它送给适当的窗口过程来处理。   除了键盘、鼠标消息以外,队列消息还有WM_PAINT、WM_TIMER和WM_QUIT。   这些队列消息以外的绝大多数消息是非队列消息。   系统消息和应用程序消息   从消息的来源来看,可以分为:系统定义的消息和应用程序定义的消息。   系统消息ID的范围是从0到WM_USER-1,或0X80000到0XBFFFF;应用程序消息从WM_USER(0X0400)到0X7FFF,或0XC000到0XFFFF;WM_USER到0X7FFF范围的消息由应用程序自己使用;0XC000到0XFFFF范围的消息用来和其他应用程序通信,为了ID的唯一性,使用::RegisterWindowMessage来得到该范围的消息ID。   消息结构和消息处理   消息的结构   为了从消息队列获取消息信息,需要使用MSG结构。例如,::GetMessage函数(从消息队列得到消息并从队列中移走)和::PeekMessage函数(从消息队列得到消息但是可以不移走)都使用了该结构来保存获得的消息信息。


网友评论