手动添加消息响应

MFC为控件添加消息响应函数(事件) 前言:VS利用向导添加成员变量时可能会遇到添加不了某个导入类的成员变量,就需要在代码里手动添加。 1、右键控件属性,修改控件ID ——>打开Resource.h,修改控件ID为新修改的ID(保持资源ID一致) #define IDC_WEB                         6 2、在头文件添加类成员(变量) ——>CButtonST m_btnWeb; 阅读详情
 Windows系统中的程序大部分都是通过消息和事件驱动的。在windows下的应用程序主要工作是进行消息的循环处理,通过循环等待消息的到来和事件 的发生,然后对不同的消息和事件运行相关的代码,完成相应的操作。Windows提供了大量的消息,主要包括3种类型:标准消息、通知消息和命令消息。当 然也可以根据用户的需要自定义一些消息。这些消息在MFC中有统一的处理框架,即消息映射机制。消息映射机制将消息及其处理函数表示成一一对应的表,并对 这张表进行分析处理。

总的来说,MFC消息映射机制的具体实现方法是:在每个能接收和处理消息的类中,定义一个消息和消息函数静态对照 表,即消息映射表。在消息映射表中,消息与对应的消息处理函数指针是成对出现的。某个类能处理的所有消息及其对应的消息处理函数的地址都列在这个类所对应 的静态表中。当有消息需要处理时,程序只要搜索该消息静态表,查看表中是否含有该消息,就可以知道该类能否处理此消息。如果能处理该消息,则同样依照静态 表能很容易找到并调用对应的消息处理函数。

无论时利用MFC向导还是手动添加消息处理时,都需要在源文件中增加三处代码:

1、在类的定义中添加消息处理成员函数的函数声明。

2、在类的消息映射表中加入相应的消息映射表项。

3、在类的实现中加入该消息处理成员函数的函数实现。

如果时自定义消息,则还需要在头文件中定义自定义消息的宏。

例如:要在ABC类中添加个自定义消息UM_AAA的处理,当消息产生的时候,响应OnAAA( )函数。可以按照下面四个步骤来实现:

1、在头文件ABC.H中定义自定义消息的宏。

#define UM_AAA  WM_USER+1

在windows系统中提供了大量的消息的同时可以给用户自定义消息提供了空间,我们在自定义消息的宏的时,只有选择WM_USER以上的数值就不会与系统提供的消息冲突了。

2、在头文件ABC.H中声明消息响应函数的OnAAA( )。

protected:

      //{{AFX_MSG (ABC)

      afx_msg  void  OnAAA( );

      //}}AFX_MSG

      DECLARE_MESSAGE_MAP( )

消息响应函数应该放在DECLARE_MESSAGE_MAP( )之前,AFX_MSG注释宏之间。该函数声明前不有一个afx_msg限定符,这也是一个宏,这个宏表面这个函数是一个消息响应函数的声明。

3、进行消息映射

BEIGIN_MESSAGE_MAP(ABC)

//{{AFX_MSG_MAP(ABC)

ON_MESSAGE(UM_AAA, OnAAA)

//}}AFX_MSG_MAP

END_MESSAGE_MAP( )

在END_MESSAGE_MAP( )之前的AFX_MSG_MAP注释宏之间用ON_MESSAGE( )将UM_AAA和OnAAA响应函数相关联起来。

4、在ABC.CPP中将消息响应函数的实现

void  OnAAA( )

{……}

只有按照上面的4个步骤,就可以根据自己的需要,在系统程序中添加合适的消息和响应函数了。
C# 手动添加响应函数 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; name 阅读详情

相关推荐

MFC Toolbar 工具栏按钮添加消息响应

工具栏按钮消息响应需要的是对应按钮的命令ID。对于动态方式创建的工具栏,其按钮的命令ID在类向导ID列表中是找不到的,只能找到图标的ID。按下述步骤不能添加事件响应。(1)VS2010 打开类向导,选择“Message Maps”选项卡,在“Class name”列表框选择创建了工具栏的对话框类,在“Object Ids”列表中选择工具栏按钮ID,在“Messages”列表中选择“COMMAND”...

yxq1122的博客 8066

手动添加消息映射

     本文以CMenu类为例子,手动添加菜单消息.1. 先建立一个基于对话框的工程,工程名字为test.2.在testDlg.h中加入public:CMenu m_menu,m_menuItem;#define WM_GETMSG WM_USER + 10000 // Generated message map functions //{{AFX_MSG(CTestDl

龙宇网的专栏 2230

C#动态添加控件的事件响应处理

C# 动态控件 事件处理举例应用及代码 C#动态添加控件的事件响应处理

在MFC中手动添加消息处理函数PreTranslateMessage

一、添加消息处理函数PreTranslateMessage,此函数可以通过MFC ClassWizard添加 BOOL CPreTranslateMessageDlg::PreTranslateMessage(MSG* pMsg) {     if (pMsg->message==WM_LBUTTONDOWN)     {         MessageBox("三三四四");

foreverhuylee的专栏 2万+

【个人记录】CentOS7升级glibc至2.28

由于CentOS7系统已经停止支持, 虽然大部分业务已经迁移至OpenEuler,但仍然有部分业务系统跑在CentOS7上。在尝试部署新业务环境时经常会提示如下错误(以code-server运行需要的node 20为例)node -v为了保障业务可正常运行,通常采用Docker继承好的node环境进行部署,但部分场景还是需要宿主机使用新版glibc版本。本文记录本人一次成功升级glibc(2.17=>2.28)的步骤。

喵呜 3883

ComfyUI+minimaxh3本地部署:漫剧分镜批量生成工作流全实操

视频生成模型正从云端API向本地化部署迁移,背后的技术逻辑是将扩散模型的文本编码、潜空间采样、VAE解码等阶段拆分为可编排的独立环节。ComfyUI作为节点化管线工具,恰好能以可视化连线方式管理这些阶段,让生成过程可控、可复用、可批量执行。minimaxh3模型支持本地推理,配合LoRA微调与参数优化,能够在保证角色一致性的前提下,从分镜脚本批量产出连续剧情片段,规避云端排队、成本高、素材不可控等工程问题。这套工作流广泛应用于漫剧、短剧和动态条漫的工业化生产,尤其适合需要高频迭代分镜草稿的内容团队。文本以零

weixin_29057065的博客 365

手动添加MapControl中的消息响应函数

在利用ArcGIS二次开发实现“鹰眼”功能时发现在MapControl控件不能自动添加控件事件(OnMapReplaced、OnExtentUpdated等)。咨询ESRI支持中心后给出的回答是: “在ArcGIS 10.0之后对于MFC框架的支持出现了一些障碍,导致ArcGISEngine中的ActiveX控件无法注册。”     既然这样那么我们就动手自己添加我们所需的响应函数。

潘安 BLOGS 2911

数字孪生实战:如何用Blender+Unity快速搭建未来工厂3D模型(附资源包)

本文提供了一套利用Blender进行三维建模,再结合Unity构建虚拟仿真环境的实用方案,旨在帮助中小型制造企业低成本、高效率地搭建未来工厂数字孪生原型系统。文章详细介绍了从数据规划、模型优化到场景构建、逻辑仿真与数据对接的全流程,并附有资源包,助力技术团队快速实现从静态展示到动态交互的数字孪生应用。

weixin_29191669的博客 341

VC2008中如何为MFC应用程序添加和删除消息响应函数

最近重温《MFC Windows应用程序设计》第二版这本书,里面的代码全部是使用VC6.0写的,我Win7下安装的是VS2008开发环境。在学习到为单文档框架的CView子类添加消息响应函数时犯难了,因为好久没用过VS2008了,之前在学校用的VC6.0和工作中Linux下C语言比较多。于是上网搜了一下,找到优快云博主kivcare这篇博客:Vc2008中如何为视图类添加消息响应

ccf19881030的专栏 1万+

Python地理空间数据库之geopandas使用详解

地理空间数据分析在许多领域中都有着广泛的应用,包括地理信息系统(GIS)、城市规划、环境科学、地质勘探等。Python GeoPandas是一个强大的库,旨在简化地理空间数据的处理和分析。本文将深入介绍GeoPandas库,包括其基本概念、功能特性、示例代码以及在实际应用中的应用场景。

Rocky006的博客 1万+

python使用TensorRT报错,多线程或多进程中使用问题

python使用TensorRT报错,Cuda Runtime问题

qq_44224801的博客 747

Vc2008中如何为视图类添加消息响应

Vc6.0直接可以在CView类添加消息响应; 右键点CView类添加事件。 在Vc2008中没找到这种功能,但可以用下面两种方式实现。 方案一:自动 右击CTextView类,选属性。在属性视图的工具栏中,有“事件”和“消息”,还有“重写”。事件就是命令事件,消息就是控件消息,重写就是重载虚函数。 点击消息就可选择**消息响应-->添加 即可自动生成。 方案二:手动 以添加O...

weixin_30409849的博客 101

USB2.0信号完整性测试之眼图

名称线缆颜色引脚描述红色绿色白色GND黑色。

qq_53766840的博客 3287

MFC 添加工具栏(全)

第1步:资源视图 新建工具条(或者在原有工具条上增加) 更改 ID 增加悬停工具栏解释说明 tag, 具体为:选中工具栏某一格 》右侧属性 》 Prompt 》 写tag 内容,格式为 \n + 内容 第2步:资源视图 增加消息响应: 一种是手动添加 WM_COMMAND,手动 switch 消息;另一种是类向导直接添加 ...

CXYYL的博客 1584

从T型结到Wilkinson:5分钟搞懂功分器选型指南(附最新射频测试数据对比)

本文通过对比T型结、电阻型和Wilkinson三种功分器的核心原理与实测数据,提供了清晰的射频功分器选型指南。文章结合最新的2.4GHz ISM频段测试数据,分析了插入损耗、回波损耗和端口隔离度等关键指标,并针对窄带物联网、射频测试及合成系统等不同应用场景,给出了具体的选型建议和实战提醒,帮助工程师根据系统需求做出最优决策。

bush的博客 305

Android车载蓝牙开发全攻略:从基础到高级优化

本文系统介绍了Android车载蓝牙开发的核心技术与实践指南。文章首先阐述了蓝牙在智能汽车中的关键作用,包括免提通话、音频流媒体等应用场景。随后详细解析了蓝牙协议基础,重点介绍了HFP、A2DP等车载常用协议。开发实战部分提供了设备发现、连接、数据传输的完整代码示例,并融入多线程和内存优化技巧。通过真实车载案例,展示了启动时间、流畅度和资源使用的优化策略。最后针对面试需求,提供了专业的技术问答,涵盖蓝牙开发全流程。全文紧密结合Android车载开发职位要求,为开发者提供了一套完整的蓝牙技术解决方案。

郑伟强dev的专栏 119

MFC消息响应

通过类向导给类添加一个消息响应函数时(如在CMainFrame类中添加WM_CLOSE消息响应),会增加以下3代码段:1.头文件CMainFrame.h类的定义中//{{AFX_MSG(CMainFrame)      //注释宏afx_msg void OnClose();          //添加的消息响应函数原型声明//}}AFX_MSG                            //注释宏afx_msg也是一个宏,表示后面的函数原型为消息响应函数原型。  2.源文件MainFrame

ratjian的专栏 1074

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

「 C++ & MFC 」“添加用户自定义消息及消息响应函数方法”讲解

一.前言 本文介绍 两种方法 添加用户自定义消息及消息响应函数。 第一种,用户手动添加两个文件((.h)和 (.cpp))的内容。 第二种,利用 MFC 的集成功能,自动添加。(推荐) 二.讲解 1.方法一:用户手动添加。 步骤: 1.在“ .h ”文件中: ...

Robot_Starscream的博客 4101

jre9下载 jdk9

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

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

MFC中动态创建button及添加响应事件

MFC中动态创建button及添加响应的事件,主要步骤如下: 1、在头文件(**Dlg.h)中添加一个CButton类型, 例如:CButton btn; 2、在(**Dlg.cpp)的OnInitDialog中创建并显示button: btn.Create(“按钮”, WS_CHILD | BS_DEFPUSHBUTTON, CRect(10, 10, 100, 100), this, ...

u011555996的博客 3653

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

C++中添加自定义消息的响应 (BEGIN_MESSAGE_MAP ON_MESSAGE)

  1首先要在窗口类的cpp文件手动添加消息响应机制,ON_MESSAGE(ID,Handler)  LRESULT   Handler(WPARAM,LPARAM);//响应的函数BEGIN_MESSAGE_MAP(CShellDlg, CDialog) //{{AFX_MSG_MAP(CShellDlg) ON_MESSAGE(WM_SENDOFFLINE, OnSen

Jacky_Dai的专栏 8309

BEGIN_MESSAGE_MAP的手动添加

evc可以手动添加自己的消息映射函数BEGIN_MESSAGE_MAP,把消息和函数指针联系起来。 1、在CPP添加: BEGIN_MESSAGE_MAP(CAutoChirperApp, CWinApp)  //{{AFX_MSG_MAP(CAutoChirperApp)  //}}AFX_MSG_MAP  // Standard file based document com

bytxl的专栏 2771

在MFC中手动添加消息处理函数PreTranslateMessage和自定义消息

 一、添加消息处理函数PreTranslateMessage,此函数可以通过MFC ClassWizard添加 BOOL CPreTranslateMessageDlg::PreTranslateMessage(MSG* pMsg) {     if (pMsg->message==WM_LBUTTONDOWN)     {         MessageBox("三三

wd_cloud的专栏 999
上一篇: 学习了下CSliderCtrl的用法
下一篇: C++中const的用法汇总
LuckilyYu
博客等级 码龄20年 72粉丝 89原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值