《深入浅出MFC》第九章 消息映射与命令传递

Windows程序的本质是借着消息来维持脉动。每个消息都有一个代码,并以WM_开头的常量表示。来自菜单和工具栏者,都以WM_COMMAND表示,参数wParam记录消息的发出者。

MFC的消息分为三大类,命令消息(WM_COMMAND),凡派生自CCmdTarget的类都有资格接收命令消息。除WM_COMMAND外,所有以WM_开头的都属于标准消息,派生自CWnd的类可接收此类消息。由控件产生的消息,为的是向父窗口传递某种情况,这种消息是以WM_COMMAND形式呈现。

MFC通过三个宏来进行消息映射,DECLARE_MESSAGE_MAP(),BEGIN_MESSAGE_MAP(CLASS,BASECLASS),END_MESSAGE_MAP()。标准的消息并不需要我们指定处理函数名称,因为处理函数名称也是标准的,如WM_PAIN会被自动映射到OnPaint函数中,前提是调用ON_WM_PAINT()宏。

整个的消息映射网通过BEGIN_MESSAGE_MAP()的第二个参数进行连接,因此可以跳过类继承层次中的某个节点。

在MFC中,多有消息都将被推送到AfxWndProc中,这里作为消息映射的起点。一般消息只能沿着继承层次结构进行处理,COMMAND消息和Notify会进行特殊处理,因为它们可能需要转个弯。OnCmdMsg用来分配命令消息的传递路径。命令消息的路径根据类中OnCmdMsg函数的不同实现而呈现出不同的传递路径。

在MFC中可以通过更简单的方式维护UI对象的状态,通过添加UPDATE_COMMAND_UI消息实现命令UI对象的状态更新。

原文地址:https://www.cnblogs.com/jefflee/p/6919405.html

时间: 2024-10-06 00:27:53

《深入浅出MFC》第九章 消息映射与命令传递的相关文章

MFC消息映射与命令传递

题外话:刚开始学视窗程序设计的时候,我就打印了一本Windows消息详解,里面列举了各种已定义消息的意义和作用,共10多页,在编程的时候翻翻,有时觉得很受用.我发觉很多编程的朋友,虽然每天都面对消息,却很少关注它.C++程序员有一个通病,很想写“自己”的程序,即每一行代码都想自己写出来.如果用了一些库,总希望能完全理解库里的类或函数是怎么一回事,否则就“不踏实”.对于消息,许多朋友只关心常用的几个,对其余的漠不关心.其实,Windows中有很多不常用的消息却很有用,程序员可能通过响应这些消息实现

深入浅出MFC——消息映射与命令传递(六)

1. 消息分类: 2. 万流归宗——Command Target(CCmdTarget): 3. "消息映射"是MFC内建的一个信息分派机制.通过三个宏(DECLARE_MESSAGE_MAP/BEGIN.../ON.../END...)完成消息网的建构. 4. 注意:CWinThread派生自CCmdTarget,但没有DECLARE_/BEGIN_/END_宏组. 5. 消息映射与虚函数: 6.

MFC里ON_COMMAND_RANGE消息映射的ID问题

今天在工作中遇到一个问题,一个动态菜单,每个菜单的菜单项ID是我自己定义的,定义如下: #define IDM_SEARCHRECORD0 222240 #define IDM_SEARCHRECORD1 222241 #define IDM_SEARCHRECORD2 222242 #define IDM_SEARCHRECORD3 222243 #define IDM_SEARCHRECORD4 222244 #define IDM_SEARCHRECORD5 222245 #define

第九章 消息总线: Spring Cloud Bus

在微服务架构的系统中, 我们通常会使用轻量级的消息代理来构建一个共用的消息主题让系统中所有微服务实例都连接上来, 由于该主题中产生的消息会被所有实例监听和消费, 所以我们称它为消息总线. 在总线上的各个实例都可以方便地广播一些需要让其他连接在该主题上的实例都知道的消息, 例如配置信息的变更或者其他一些管理操作等 由于消息总线在微服务架构系统中被广泛使用, 所以它同配置中心一样, 几乎是微服务架构中的必备组件. Spring Cloud 作为微服务架构综合性的解决方案,对此自然也有自己的实现, 这

第九章.处理器映射器和适配器

本次课程在 第八章 基础上进行的!!! 非注解的处理器映射器和适配器 一.SimpleUrlHandlerMapping 找到springmvc.xml文件 找到下面的代码进行注释 <!-- <bean name="/query_test.action" class="cn.com.mvc.controller.FruitControllerTest"></bean> --> <!-- <bean class=&quo

【笔记】《深入浅出MFC》第5章 总观Application Framework

凝聚性强.组织化强的类库就是Application Framework.一组合作无间的对象,彼此藉消息的流动而沟通,并且互相调用对方的函数以求完成任务,这就是Application Framework. Application Framework是一组超级的类库,能够被称为Framework者必须是其中的类性质紧密咬合,互相呼应. 绝大部分类库,往往以一个或两个类,作为其它绝大部分类的基础,MFC也一样.CObject是万类之首,凡派生自CObject者,得以继承数个面向对象重要性质,包括RTT

《深入浅出MFC》第六章 MFC程序的生死因果

SDK程序设计的第一要务是理解最重要的数个API函数的意义和用法,MFC程序设计的第一要务则是理解几个最重要的类,最基本的两个类为CWin App和CFrameWnd. 开发MFC程序需要的函数库:Windows C Runtime函数库(LIBC.LIB静态链接版本,MSVCRT.LIB,MSVCRTD.LIB).DLL Import函数库(GDI32.LIB,USER32.LIB,KERNEL32.LIB等).MFC函数库(AFX函数库)(MFC42.LIB等). STDAFX.h是作为预编

MFC消息映射的原理:笔记

多态的实现机制有两种,一是通过查找绝对位置表,二是查找名称表:两者各有优缺点,那么为什么mfc的消息映射采用了第二种方法,而不是c++使用的第一种呢?因为在mfc的gui类库是一个庞大的继承体系,而里面的每个类有很多成员函数(只说消息反映相关的成员函数啊),而且在派生类中,需要改写的也比较少(我用来做练习的程序就是那么一两个,呵呵).那么用c++的虚函数的实现机制会导致什么问题呢?就是大量虚表的建立使得空间浪费掉很多. 嗯-怎么办呢?于是各大c++名库(比如QT,MFC,VCL-)在消息映射的实

MFC 三种消息

在MFC应用程序中传输的消息有三种类型:窗口消息.命令消息和控件通知. (1)窗口消息:WM_XXX 窗口消息(Window Message)一般与窗口的内部运作有关,如:创建窗口.绘制窗口和销毁窗口等.通常,消息是从系统发送到窗口,或从窗口发送到窗口. (2)命令消息:WM_COMMAND 命令消息一般与处理用户请求相关,当用户单击一个菜单项或工具栏时,命令消息产生,并被发送到能处理该请求的类对象(如:装载文件.编辑文本和保存选项等). (3)控件通知:有多种格式       通常,控件通知在