MFC架构之CCmdTarget类

MFC 详解一之重要的类 最近好久没用vs下的mfc工程了,感觉对于mfc越来越感到莫名的陌生不了解,网上也看到好多关于mfc的深入了解的博客,其中liyi268这位前辈对于mfc六大机制总结的很到位,还有就是《深入浅出 MFC》侯俊杰的这本书更是没话说,一直犹豫要不要写mfc方面的博客,最终想想为什么不写呢,也许自身的水平有限,也许投入写mfc博客的时间会比较长,但是自身总结一方面能加深印象,促使自己更加深入的了解,一方 阅读详情

       类CCmdTarget是MFC类库中消息映射体系的一个基类。所有响应消息或事件的类都从它派生。例如,CWinApp,CWnd,CDocument,CView,CDocTemplate,CFrameWnd,等等。
       CCmdTarget类是MFC处理命令消息的基础、核心。MFC为该类设计了许多成员函数和一些成员数据,基本上是为了解决消息映射问题的,而且,很大一部分是针对OLE设计的。在OLE应用中,CCmdTarget是MFC处理模块状态的重要环节,它起到了传递模块状态的作用:其构造函数获取当前模块状态,并保存在成员变量m_pModuleState里头。

       CmdTarget有两个与消息映射有密切关系的成员函数:DispatchCmdMsg和OnCmdMsg。

1.静态成员函数DispatchCmdMsg
CCmdTarget的静态成员函数DispatchCmdMsg,用来分发Windows消息。此函数是MFC内部使用的,其原型如下:
static BOOL DispatchCmdMsg(
CCmdTarget* pTarget,UINT nID,int nCode,AFX_PMSG pfn,
void* pExtra,UINT nSig,AFX_CMDHANDLERINFO* pHandlerInfo)。

2. 虚拟函数OnCmdMsg
CCmdTarget的虚拟函数OnCmdMsg,用来传递和发送消息、更新用户界面对象的状态,其原型如下:
OnCmdMsg(UINT nID,int nCode,void* pExtra,AFX_CMDHANDLERINFO* pHandlerInfo);
    框架的命令消息传递机制主要是通过该函数来实现的。本文中命令目标指希望或者可能处理消息的对象;命令目标类指命令目标的类。
CCmdTarget对OnCmdMsg的默认实现:在当前命令目标(this所指)的类和基类的消息映射数组里搜索指定命令消息的消息处理函数(标准Windows消息不会送到这里处理)。这里使用虚拟函数GetMessageMap得到命令目标类的消息映射入口数组_messageEntries,然后在数组里匹配指定的消息映射条目。匹配标准:命令消息ID相同,控制通知代码相同。因为GetMessageMap是虚拟函数,所以可以确认当前命令目标的确切类。如果找到了一个匹配的消息映射条目,则使用DispachCmdMsg调用这个处理函数;如果没有找到,则使用_GetBaseMessageMap得到基类的消息映射数组,查找,直到找到或搜寻了所有的基类(到CCmdTarget)为止;如果最后没有找到,则返回FASLE。
      每个从CCmdTarget派生的命令目标类都可以覆盖OnCmdMsg,利用它来确定是否可以处理某条命令,如果不能,就通过调用下一命令目标的OnCmdMsg,把该命令送给下一个命令目标处理。通常派生类覆盖OnCmdMsg时,要调用基类的被覆盖的 OnCmdMsg。
      在MFC框架中,一些MFC命令目标类覆盖了OnCmdMsg,如框架窗口类覆盖了该函数,实现了MFC的标准命令消息发送路径。
必要的话,应用程序也可以覆盖OnCmdMsg,改变一个或多个类中的发送规定,实现与标准框架发送规定不同的发送路径。例如,在以下情况可以作这样的处理:在要打断发送顺序的类中把命令传给一个非MFC默认对象;在新的非默认对象中或在可能要传出命令的命令目标中。

 

CCmdTarget还有以下三个函数

1.BeginWaitCursor  显示沙漏标
2.EnableAutomation  允许CCmdTarget对象的OLE自动函数
3.RestoreWaitCursor  重置沙漏标

实例:

深入解析MFC的CCmdTarget类:消息处理与命令目标的基石 CCmdTarget是MFC框架的核心基类,提供消息处理、命令路由和OLE自动化支持。摘要要点如下: 核心功能: 消息映射机制(BEGIN_MESSAGE_MAP/END_MESSAGE_MAP) 命令路由(OnCmdMsg处理CN_COMMAND/CN_UPDATE_COMMAND_UI) OLE自动化支持(EnableAutomation/GetIDispatch) 典型应用: 实现自定义命令系统(注册/执行命令) 处理反射消息(OnChildNotify) 管理OLE对象生命周期(ExternalAd 阅读详情

相关推荐

MFC Active控件运行没问题,退出时CCmdTarget::CCmdTarget()报:line 40 断言失败,如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 1210

CmdTarget.cpp

// BEGIN_MESSAGE_MAP(theClass, baseClass) // END_MESSAGE_MAP()const AFX_MSGMAP* theClass::GetMessageMap() const {  return &theClass::messageMap; }const AFX_MSGMAP theClass::messageMap = {  &baseClass:

种田能手 1925

【2021末九软工边缘人保研】川大-中科院网络中心-华师夏令营+哈工大本-中科院网络中心-西交-厦大-中山-武大-北航预推免

2021末九软工边缘人保研记录一、写在前面二、个人背景 一、写在前面 2020年计算机保研可谓是诸神黄昏,卷的头破血流(指我等菜鸡)。疫情的原因,今年的夏令营和预推免基本全部改为线上,机试取消,能不能拿到offer基本完全取决于背景以及面试表现(当然也有个别头铁非要机试,甚至笔试的学校)。大佬们offer收割不停,我等边缘人只能看着一封封拒信发呆。 这种情况下,只有985 Rank5%以及211 Rank2%之前的大佬能够较为轻松地拿到面试入场券。贴一个上交电院夏令营要求你们感受一下: 预推免相比起夏令营

weixin_43222706的博客 4235

MFC:总结篇 CCmdTarget类

一.简介 CCmdTarget 类是CObject 类的子类 所有响应消息或事件的类都从它派生,例如: CWinapp CWnd CDocument CView CDocTemplate CFrameWnd等 CCmdTarget 类是 MFC 处理命令消息的基础核心 转载于:https://www.cnblogs.com/k5bg/p/11214203.html...

weixin_30446613的博客 660

超详细 VMware Horizon 虚拟桌面VDI安装步骤

主要的目的是模拟生产环境中的共享存储。自动桌面相当于共享电脑,大家使用同一个虚拟机,对虚拟机的修改都放在用户的配置文件中,RDS桌面池相当于共享的服务器,可以多人同时连接到服务器上。1:之前已经建立好了NFS的存储,这部分配置好后,以后的虚拟机可以安装到NFS的存储中。2: 使用Composer发布系统可以解决SID,机器名冲突的问题,更重要的可以节约磁盘空间,发布的所有系统可以访问一块磁盘。26: 域选择我们之前建立的域,用户名我输入的是管理员,可以在AD域新建用户点击查找,我这里用的是管理员。

vv12345的博客 1万+

Verilog实现FIR滤波器

1、FIR滤波器简介 不追究FIR滤波器的深层含义,我们只关注如何实现;可以看出,FIR滤波器的本质就是延迟、系数相乘与求和,如下图: 2、设计 基于以上分析,按照三级流水实现FIR滤波器设计:信号延迟-系数相乘-求和 `timescale 1ns / 1ps module fir( input clk, input rst_n, input [3:0]din, output reg [9:0]dout ); // data reg reg [3:0]din1; reg [3:.

CLL_caicai的博客 1万+

CmdTarget.h

struct AFX_MSGMAP_ENTRY{ unsigned int nMessage;   // windows消息 unsigned int nCode;      // control code or WM_NOTIFY code unsigned int nID;        // control ID (or 0 for windows messages) unsigned in

种田能手 1810

ST03N 里看不到 SE38 / SA38?别急,这不是没记录,而是被换了名字

摘要:SAP系统中SE38/SA38事务码在ST03N统计中可能"隐身",因其对话步骤被归集到对应的程序名(如SE38→RSABAPPROGRAM)。ST03N侧重工作负载聚合统计,而STAD提供短期明细记录。正确排查方法是:在ST03N中搜索程序名而非事务码,再通过STAD验证具体使用情况。这一现象在权限整改和审计中易造成误判,建议将程序名纳入常规监控,并区分ST03N(趋势分析)与STAD(事实校验)的不同用途。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 953

MFC CCmdTarget Class成员变量及成员函数

该类派生于CObject,它封装了MFC的消息映射机制,希望接收系统事件和窗口消息的类都从它派生,如CDocument和CWnd分支。此外,在系统繁忙,无法响应窗口消息时,鼠标光标应该显示为沙漏形等待状态,CCmdTarget类封装了3个成员函数完成该功能。CCmdTarget类以一种类似消息映射的机制提供IDispatch接口,所以使用MFC可以轻松地编写AUTOMATION客户程序和组件。

海纳百川,有容乃大。 1500

90. 将 SAP ABAP 内表内容本地导出成 Excel 文件

这里文件扩展名为 csv,全称是 Comma-Separated Values,意思是这种类型的文件内容,由逗号分隔。除了 ASC 之外,另一个可用的选项是 BIN,适用于 PDF,EXE 等二进制文件的导出。支持海量的输入和输出参数,我们这个简单的本地导出场景里,大部分参数都用不上。这个分隔符的添加逻辑,编写在上图红色高亮矩形框内,使用的语法是。本教程有学习者向我提问,询问如何将 ABAP 某某函数的某某输出参数的值,导出成本地 Excel 文件。把这个内表的内容,下载到本地,以本地文件的方式保存。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1742

深度学习流体力学:基于PyTorch的物理信息神经网络(PINN)完整实现

本文介绍了基于物理信息神经网络(PINN)的深度学习流体力学求解器实现。首先阐述了Navier-Stokes方程的理论基础,包括连续性方程和动量守恒方程,并解释了PINN的核心原理:将物理方程作为约束条件嵌入神经网络损失函数。以经典的lid-driven cavity流动为例,详细展示了使用PyTorch实现的全流程,包括神经网络架构设计、自动微分求解Navier-Stokes方程、多约束条件优化训练等关键环节。该求解器通过将物理方程、边界条件和初始条件整合到损失函数中,实现了对流体力学问题的端到端求解,为

源代码杀手的博客 9839

关于CCmdTarget及消息映射

CCmdTarget类直接继承自CObject,主管应用程序架构,其向下直接派生出CWnd,而CWnd是所有控件、框架窗口、对话框、视图类的父类。 CCmdTarget类是可以在里面使用消息映射的类,其派生的所有类都有消息映射函数。能用消息映射的类的基类都必须是CCmdTarget类。 CCmdTarget类的派生类在头文件中都必须提供DECLARE_MESSAGE_MAP()宏,在类的CPP文件中都有相应的BEGIN_MESSAGE_MAP(当前类, 直接父类)和END_MESSAGE_MAP()宏与

hohoyu的专栏 1499

论文分栏前后内容不连续?教你word如何删除分节符

问题 当我们在写论文的时候,很多期刊的模板都是两栏的格式,但有的时候我们插入的图像尺寸可能太大,两栏格式放不下,因此需要将其以一栏的格式出入,如下: 但当我们把图片删除后,再将其转换成两栏格式,前后内容就出现不连续的情况: 正常情况下应该是如下: 正确处理方式 里面有个分页符,把分页符去掉,或者把你的文字全部复制到记事本里,然后重新复制回word就可以取消原有的格式了。 删除分节符的方法(以word 2019为例) -点击菜单栏上的“视图”,点击“大纲视图”。 可以看到word文档以整列的形式展开:

左手の明天的博客 1万+

MFC总结

一、MFC类库概述 MFC(Microsoft Foundation class)微软基本类(库),有时候也有人叫做微软基本类库,因为它确实是一个类库(物理上讲),而且非常庞大;它也是一个面向对象的应用程序架构(逻辑上),程序员利用它可以很方便搭建应用程序框架。MFC结合了面向对象的编程技术和WINDOWS消息驱动的编程技术,并封装了WIN32API,其设计好处:消除了WIN32API的复杂性,封装了WIN32API,统一了程序的概念,而且可扩展。MFC由AFX项目小组进化而来,还有一些AFX代码,如Af

保护大苹果 744

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

MFC深入-1.MFC是一个编程框架

因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。例如,SDI应用程序的模板,MDI应用程序的模板,规则DLL应用程序的模板,扩展DLL应用程序的模板,OLE/ACTIVEX应用程序的模板,等等。这样,通过虚拟函数和消息映射,MFC类提供了丰富的编程接口。这些类或者封装了Win32应用程序编程接口,或者封装了应用程序的概念,或者封装了OLE特性,或者封装了ODBC和DAO数据访问的功能,等等,分述如下。

qq_41237850的博客 483

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

CCmdTarget类

该类派生于CObject,它封装了MFC的消息映射机制,希望接收系统事件和窗口消息的类都从它派生,如CDocument和CWnd分支。此外,在系统繁忙,无法响应窗口消息时,鼠标光标应该显示为沙漏形等待状态,CCmdTarget类封装了3个成员函数完成该功能。封装COM的 IDispatch接口是它的另一项主要功能。IDispatch是COM的标准接口,不含指针操作的语言(如VB)以及描述性语言(如

WINCOL的专栏 3915

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

vc++学习笔记—11月14日

第三章 应用程序框架句柄HWND 窗口句柄 HBITMAP 位图句柄HICON 图标句柄HMENU 菜单句柄HFILE 文件句柄HINSTANCE 当前实例句柄HGLOBAL 全局内存对象句柄HDC 设备环境句柄HCURSOR 光标句柄HFONT 字体句柄HPEN 画笔句柄HBRUSH 画刷句柄HLOCAL 局部内存对象句柄旁注:char是char[]的首地址同样 main是main()的

Lepto_Neek 1735

CCmdTarget

CCmdTarget 类CCmdTarget是MFC类库中消息映射体系的一个基类。消息映射把命令或消息引导给用户为之编写的响应函数(命令是由菜单项、命令按钮或者加速键产生的消息)。从CCmdTarget继承来的按键框架类包括:C

firectrl的专栏 4873

MFC常见的类

MFC常见的类: CCmdTarget:是MFC类库中消息(消息分为:标准消息(只有由CWnd类派生来的类才可以接受到此类消息)、命令消息(CCmdTarget的派生类都可以接收到此类消息)、通知消息)映射体系的一个基类,是MFC处理命令消息的基础、核心。消息映射把命令或消息引导给用户为之编写的响应函数。 CWnd:窗口,   它是大多数“看得见的东西”的父类(Windows里几乎所有看得见的

钢部的博客 3649

常用的MFC类

常用的MFC类CRuntimeClass结构在CRuntimeClass结构中定义了类名、对象所占存储空间的大小、类的版本号等成员变量及动态创建对象、派生关系判断等成员函数。每一个从CObject类派生的类都有一个CRuntimeClass结构同它关联,以便完成在运行时得到对象的信息或基类的信息。要使用CRuntimeClass结构,必须结合使用RUNTIME_CL

liviatt的专栏 965

C++ MFC/BCG编程(一):MFC简介及MFC类库概述

MFC(Microsoft Foundation Classes Library,微软基础类库)是微软公司推出的一套用于Windows平台的C++类库,它基于Win32 API进行封装,提供了面向对象的编程接口,旨在简化Windows应用程序的开发过程。通过MFC,开发者可以不必直接与底层的Win32 API打交道,而是利用MFC提供的类和对象来快速构建出具有标准用户界面的应用程序。VC++全称Visual C++,是由微软提供的C++开发工具,是用C++语言编写程序的工具平台。

qq_39281631的博客 2490

MFC 主类说明

1.CObject类为MFC总类,该类下面有一个重要的类CCmdTarget。而CCmdTarget类下面又有四个重要的继承类,分别为:CWinThread、CDocument、CDocTemplate、        CWnd类。所以,可以得出一个大概继承图,如图所示:                      CObject--->CCmdTarget ---->CWinThread --

蜡笔小辛的专栏 2273

类CCmdTarget

CCmdTarget Class Microsoft基础类库选件消息映射体系结构的基类。   公共构造函数 名称 说明 CCmdTarget::CCmdTarget 构造 CCmdTarget 对象。 公共方法

heary29的专栏 1338

MFC类

MFC类说明 CObject类:CObject是MFC的根类,绝大多数MFC类是其派生的,CObject 实现了一些重要的特性,包括动态类信息、动态创建、对象序列化、对程序调试的支持,等等。CObject定义了一个CRuntimeClass类型的静态成员变量:CRuntimeClass classCObject,还定义了几组函数:构造函数析构函数类,诊断函数,与运行时类信息相关的函数,与串行化相关

xwj102的专栏 1026
上一篇: MFC架构之CObject类
下一篇: MFC架构之CWinThread类
FlowShell
博客等级 码龄17年 119粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值