afx_msg函数意思

应用程序框架产生的消息映射函数
例如:afx_msg void OnBnClickedButton1(); 其中 afx_msg为消息标志,它向系统声明:有消息映射到函数实现体;
而在map宏定义中,就有具体消息和此函数的映射定义(可以是自定义,也可以是系统自动完成的)
afx是 application framework
如定义一个Edit的Change处理函数:
一、在类的头文件(*.h)中增加 :
  //{{AFX_MSG(CDialogDemo)  
  afx_msg  void OnChangeEdit1();
  //{{AFX_MSG  
二、在类的实现文件(*.cpp)中增加:
 
1.消息定义( ON_EN_CHANGE):
BEGIN_MESSAGE_MAP(CDialogDemo, CDialog)
//{{AFX_MSG_MAP()  
ON_EN_CHANGE(IDC_EDIT1, OnChangeEdit1)
 //}}AFX_MSG_MAP  
END_MESSAGE_MAP()  
2.执行函数:
void CDialogDemo::OnChangeEdit1()
{
 // TODO: Add your control notification handler code here
……
}  

在afxwin.h中afx_msg的解释: 
  #ifndef   afx_msg 
  #define   afx_msg                   //   intentional   placeholder 
  #endif 
    没什么意思.只是定义了这个符号而已.   这个对编译器来说,相当于什么都没有,对于人来说,我们可以看到这样的符号.  
对于类向导来说.这个符号才是有意义的.它是一个消息处理函数的前缀.   类向导生成的消息函数,分发函数,事件响应函数都以这个为前缀. 
 如果去掉了,向导将不能识别

 

 

DECLARE_MESSAGE_MAP的理解

在一些资料上,有这么一段文字:
DECLARE_MESSAGE_MAP()
说明:
用户程序中的每个CCmdTarget派生类必须提供消息映射以处理消息。在类定义的末尾使用DECLARE_MESSAGE_MAP宏。接着,在定义类成员函数的.CPP文件中,使用BEGIN_MESSAGE_MAP宏,每个用户消息处理函数的宏项下面的列表以及END_MESSAGE_MAP宏。
注释:
如果在DECLARE_MESSAGE_MAP之后定义任何一个成员,那么必须为他们指定一个新存取类型(公共的,私有的,保护的)。

我觉得他描述得欠妥,我的理解是:

只要有:只要是CCmdTarget(用于所有能够消息映射的基类)派生类,必有消息映射以处理消息,则在类的说明文件的尾部有DECLARE_MESSAGE_MAP宏,在类的定义文件中有BEGIN_MESSAGE_MAP宏和END_MESSAGE_MAP宏以处理用户消息。

其中BEGIN_MESSAGE_MAP(参数1,参数2) ,参数1为该类的类名参数2为该类基类的类名

其中ON_MESSAGE(参数1,参数2),参数1为响应的消息参数2为该消息对应的处理的函数名

BEGIN_MESSAGE_MAP(CH264PlayerDlg, CDialog)
//{{AFX_MSG_MAP(CH264PlayerDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_SIZE()
ON_BN_CLICKED(IDC_PLAY, OnPlay)
ON_COMMAND(IDR_FILE_OPEN, OnFileOpen)
ON_BN_CLICKED(IDC_STOP, OnStop)
ON_COMMAND(IDR_VIEW_FULLSCRREN, OnViewFullscrren)
ON_COMMAND(IDR_VIEW_ORIGINALSIZE, OnViewOriginalsize)
ON_WM_LBUTTONDBLCLK()
ON_BN_CLICKED(IDC_CUTPIC, OnCutPicture)
ON_COMMAND(IDR_ABOUTBOX, OnAboutbox)
ON_WM_ERASEBKGND()
ON_WM_CTLCOLOR()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

 

MFC BEGIN_MESSAGE_MAP()

简单用法:

  BEGIN_MESSAGE_MAP(CpassApp, CWinApp)

  ON_COMMAND(ID_HELP, CWinApp::OnHelp)

  END_MESSAGE_MAP()

  这些都是宏定义,不是函数。

  在BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()之间添加你的消息响应函数,为每个消息处理函数加入一个入口

  BEGIN_MESSAGE_MAP( theClass, baseClass )

参数:

  

theClass指定消息映射所属的类的名字。
baseClass指定theClass的基类的名字。

说明:

  使用BEGIN_MESSAGE_MAP宏开始你的消息映射的定义。

  在你的类的成员函数的实现文件(.CPP)中,使用BEGIN_MESSAGE_MAP宏开始消息映射,然后为每个消息处理函数加入一个入口,最后用END_MESSAGE_MAP宏结束消息映射。

  每个消息映射入口的格式如下:

  ON_Notification(id, memberFxn)

  其中id指定了发送通知的控件的子窗口的ID,而memberFxn指定了处理该通知的父对象中的成员函数名。

  父对象的函数原型格式如下:

  afx_msg void memberFxn( );

  可能的消息映射入口如下:

  

映射入口何时向父对象发送消息
ON_BN_CLICKED用户单击按钮时
ON_BN_DOUBLECLICKED用户双击按钮时

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253630.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文件得编码和文件名的编码是不一样的

1.新知识,通过文件后坠名的编码判断文件类型,可以有效的防止脚本文件伪装为正常得文件。 2.拦截器和过滤器。 过滤器只能够在http请求和回复的时候进行处理。 但是拦截器可以在很多地方拦截,例如程序抛异常等都可以捕获的到。还可以进行权限得…

Visual computing——概述

Visual Computing(视觉计算)是所有处理二维图像和三维模型的计算机科学学科的总称,即计算机图形学、图像处理、可视化、计算机视觉、虚拟和增强现实、视频处理,但也包括模式识别、人机交互、机器学习等方面。核心挑战是视觉信息&a…

推荐!手把手教你使用Git

一:Git是什么? Git是目前世界上最先进的分布式版本控制系统。 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑&#xff0…

I2C协议学习

I2C Bus(Inter-Integrated Circuit Bus) 最早是由Philips半导体(现被NXP收购)开发的两线式串行总线,常用于微控制器与外设之间的连接。 一、概述 以下是 I2C 总线的一些特性: 只需要两条总线;一条串行数据线 (SDA) 和…

ajax的简单介绍

响应主体,就是服务器给我们返回的结果内容(浏览器里的responsive) 请求主体,是我们给服务器的数据 输入域名发起一次请求,得到的可能是标签,标签可能还要在发一次请求 post怎么发请求:form表单 …

DM365 color space

YUV的几种格式 420P:420P数据的存放方式一般是先存放Y,然后存放U,最后存放V的数据,每一个像素使用12bits(1.5BYTE)保存。 422P:422P数据的存放方式也是先存放Y,然后存放U,最后存放V的数据&…

JavaScript 标准参考教程-阅读总结(三)

1、DOM模型 DOM 是 JavaScript 操作网页的接口,全称为“文档对象模型”(Document Object Model)。它的作用是将网页转为一个 JavaScript 对象,从而可以用脚本进行各种操作(比如增删内容)。 1)do…

P1136 迎接仪式

P1136 迎接仪式 题目描述 LHX教主要来X市指导OI学习工作了。为了迎接教主,在一条道路旁,一群Orz教主er穿着文化衫站在道路两旁迎接教主,每件文化衫上都印着大字。一旁的Orzer依次摆出“欢迎欢迎欢迎欢迎……”的大字,但是领队突然…

云服务器 VNC 远程连接

此服务器买来是为了搭建IC EDA云的,因此选用的是centOS 6的环境,对各EDA软件兼容较好。本人手头拮据,因此买的是腾讯云活动期间的云服务器,只能说够用吧。 一、桌面安装 在云服务器控制台登陆上远程主机,依次执行下列…

Python自动化测试框架有哪些?

作者 | KITTY GUPTA 译者 | 张健欣 令开发者万分高兴的是,开发自己的测试框架的日子终于结束了。以前,开发团队接手一个项目并开始开发时,除了项目模块的实际开发之外,他们不得不为这个项目构建一个自动化测试框架。一个测试框架应…

面试题——4种数组去重的方法

数组去重或者其衍生作为笔试题或者机试题出现的几率也是很大的,写出的方法越多,则让面试官觉得你思维越开阔,那么成功的几率当然就大了。 废话不多说,下面来说说下面我整理的4中数组去重的方法 方法一: findInArr方法s…

MFc消息映射机制理解

何谓消息、消息处理函数、消息映射?消息简单的说就是指通过输入设备向程序发出指令要执行某个操作。具体的某个操作是你的一系列代码。称为消息处理函数。在SDK中消息其实非常容易理解,当窗口建立后便会有一个函数(窗口处理函数)开…

Effective C++ 条款11:在operator=中处理自我赋值

”自我赋值”发生在对象被赋值给自己时: class Widget { ... }; Widget w; ... w w; // 赋值给自己 a[i] a[j]; // 潜在的自我赋值 *px *py; // 潜在的自我赋值class Base { ... }; class Derived: public Base { ... }; void doS…

Demosaic算法学习

一、概述 由于成本和面积等因素的限定,CMOS图像传感器在成像时,感光面阵列前通常会有CFA (color filter array),CFA过滤不同频段的光,因此,Sensor的输出的RAW数据信号包含了3个通道的信息。 CFA的排列方式一般有以下几种: 现在应用最广泛的是Bayer CFA。…

Sql Server中查询当天,最近三天,本周,本月,最近一个月,本季度的数据的sql语句...

--当天&#xff1a;select * from T_news where datediff(day,addtime,getdate())0--最近三天&#xff1a;select * from T_news where datediff(day,addtime,getdate())< 2 and datediff(day,addtime,getdate())> 0--本周&#xff1a;select * from T_news WHERE (DATEP…

linux设备驱动归纳总结(五):3.操作硬件——IO静态映射【转】

本文转载自&#xff1a;http://blog.chinaunix.net/uid-25014876-id-83299.html linux设备驱动归纳总结&#xff08;五&#xff09;&#xff1a;3.操作硬件——IO静态映射 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 有时候会觉…

UML中关联,聚合,组合的区别及C++实现

类间关系 在类图中&#xff0c;除了需要描述单独的类的名称、属性和操作外&#xff0c;我们还需要描述类之间的联系&#xff0c;因为没有类是单独存在的&#xff0c;它们通常需要和别的类协作&#xff0c;创造比单独工作更大的语义。在UML类图中&#xff0c;关系用类框之间的连…

sql server management studio 快速折叠object explorer中的instance

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/6e20fa7a-c0a9-496b-89b2-19c6bd996ffc/how-to-collapse-object-explorer-tree-in-management-studio?forumsqltools home键&#xff0c;回到top level。 然后F5刷新&#xff0c;就会自动折叠了转载于:https://www.…

自动白平衡算法学习

一、概述 1、颜色恒常性 首先,从色彩学的角度,自然界中的任一种颜色都可以用红、绿、蓝三种颜色混合而成,因此这三种颜色被做为最常用的三原色,即RGB 三原色。 其次,眼睛对于色彩的察觉是由于光照射在物体之上,物体会吸收一部分波长的光,而其被物体反射的那部分波长的光…

自动曝光算法学习

一、概述 在一个完整的成像系统中,所得图像的亮度由四个方面因素所决定:环境光照强度、相机的光圈大小、曝光时间、信号增益。从这四个因素可以看出,首先环境光照强度是由外界环境光照所决定的,达不到人为任意控制;因此想要调整图像亮度至合适的程度,需要考虑对光圈大小、…