MFC消息映射学习笔记

本文深入探讨MFC(Microsoft Foundation Classes)中的消息处理机制,包括事件与消息的关系、消息分类、消息发送方式、消息映射的原理和实现,以及键盘和鼠标消息的详细处理。通过实例解析了如何映射和处理自定义消息,以及如何处理鼠标移动、点击和键盘输入等事件,帮助读者理解MFC应用程序的核心运行机制。
摘要由CSDN通过智能技术生成

事件和消息

一、消息就是用于描述某个事件发生的信息,而事件是对于Windows的某种操作。

二、事件和消息密切相关,事件是因,消息是果,事件产生消息,消息对应事件。所谓消息的响应,其实质就是事件的响应。

三、消息驱动是Windows应用程序的核心,所有的外部响应(如键盘、鼠标和计时器等)都被Windows先拦截,转换成消息后再发送到应用程序中的目标对象,应用程序根据消息的具体内容进行处理。

四、消息不仅可由Windows发出,它也可由应用程序本身或其它程序产生。Windows为每一个应用程序都维护一个或多个消息队列,发送到每个程序窗口的消息都排成一个队列。

消息分类

一、从消息的发送途径上看,可以分为队列消息和非队列消息。

         A、队列消息大都是用户输入的结果,如WM_KEYDOWN和WM_KEYUP、WM_CHAR、                       WM_MOUSEMOVE、WM_LBUTTONDOWN和WM_LBUTTONUP。队列消息还包括时                钟消息(WM_TIMER)、重画消息(WM_PAINT)和退出消息(WM_QUIT)等

         B、非队列消息大部分来自特定的Windows函数,如当调用UpdateWindow时,Windows         将给调用此函数窗口的窗口过程发送WM_PAINT;当调用DestroyWindow时,Windows       将给调用此函数窗口的窗口过程发送WM_DESTROY等

二、从消息的来源来看,可以分为系统消息和自定义消息。

         A、Windows消息是预定义的一些UINT常量值,它对系统本身用到的消息进行了定义

         B、为了实现额外的消息,系统为开发人员预留了消息定义的接口

三、系统消息ID的范围是从0~WM_USER-1,或0X80000~0XBFFFF;应用程序消息从WM_USER(0X0400)~0X7FFF,或0XC000~0XFFFF;WM_USER~0X7FFF范围的消息由应用程序自己使用;0XC000~0XFFFF范围的消息用来和其他应用程序通信,为了保证ID的唯一性,使用::RegisterWindowMessage来获取该范围的消息ID

四、从对消息的处理上看,可以分为窗口消息、命令消息和控件通知。

         A、窗口消息(WindowMessage)是由操作系统和控制其他窗口的窗口所使用的消息, 它一般与窗口的内部运作有关,如创建窗口、绘制窗口和销毁窗口等

         B、命令消息是一种特殊的窗口消息,它从一个窗口发送到另一个窗口,以处理来自用  户的请求。当用户单击一个菜单项、工具栏或者使用加速键时,将会产生命令消息,并     被发送到能处理该请求的类对象

         C、控件通知类似于命令消息,当用户与控件窗口交互时,这一类消息就从控件窗口发  送到其主窗口

 

消息发送

一、发送消息到一个窗口可以采用传送(Send)或寄送(Post)方式,这两种方式之间的主要区别是消息被接收对象收到后是否立即被处理。

二、Windows提供了三个API函数用于消息的发送

         A、SendMessage函数用于向一个或多个窗口传送消息,该函数将调用目标窗口的窗口   函数,直到目标窗口处理完收到的消息,该函数才返回。

         B、PostMessage函数用于向一个或多个窗口寄送消息,它把消息放在指定窗口创建的   线程的消息队列中,然后不等消息处理完就返回。

         C、SendDlgItemMessage函数函数用于向对话框中指定的控件发送消息,直到目标控件 处理完收到的消息,该函数才返回。

三、三个函数拥有相同的参数:

         HWNDhWnd,      // handle to destinationwindow

         UINTMsg,       // message

         WPARAMwParam,  // first message parameter

         LPARAMlParam   // second message parameter

四、MFC将这三个函数封装为CWnd窗口类的成员函数,封装了目标窗口句柄(不需要hWnd这个参数),它们将向调用它的窗口对象发送或寄送消息,

五、与用户输入相关的消息(如鼠标消息和键盘消息)通常是以寄送(Post)的方式发送,以便这些用户输

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值