MFC定义的宏、全局函数及全局变量

深入解析MFC中常用的宏定义 让你充分理解掌握MFC宏定义的作用和意义 立即下载

MFC和Windows程序一样,使用大量的宏,宏不带任何前缀,全由大写字母表示。

1. MFC提供的主要宏:
•  消息映射宏: 声明消息映射表 (将于3.2.2节介绍)宏DECLARE_MESSAGE_MAP、定义消息映射表宏BEGIN_MESSAGE_MAP和END_MESSAGE_MAP对、消息映射表入口宏ON_加消息名。
•  动态 MFC对象宏: DECLARE_DYNCREATE和DECLARE_DYNAMIC, IMPLEMENT_DYNCREATE和IMPLEMENT_DYNAMIC
•  运行时类宏: RUNTIME_CLASS
•  序列化宏: DECLARE_SERIAL和IMPLEMENT_SERIAL
•  诊断服务宏: ASSERT、VERIFY
•  跟踪服务宏: TRACE
•  异常处理宏: THROW
  本章只介绍消息映射宏, MFC程序处理消息非常轻松,得益于其庞大的消息宏系统,使程序设计人员从记忆大量的消息参数中解脱出来。

2. 全局函数
  MFC提供一些不属于任何类的全局函数,函数名以Afx开头,可以被应用程序中的所有类和函数所调用。如AfxAbort,无条件终止一个应用程序的执行;AfxGetAppName,返回指向应用程序名的字符串指针;AfxWinInit由WinMain调用,对MFC应用程序进行图形用户界面(GUI)的初始化等等。

3. 全局变量
全局变量名以 afx开头,如afxTraceFlag、afxDump等,主要与异常处理有关。

•  MFC命名规则

  MFC采用匈牙利命名法,这一名称来自Microsoft的匈牙利籍程序员Charles Simonyi。
  匈牙利命名法 建议,变量名通常 以一个或多个小写字母开头作为前缀,标示变量的数据类型;类型标示后是若干个单词,标示变量含义,每个单词以大写字母开头,其余字母小写; MFC中所有类及自定义类都以C开头;类成员变量以m_为前缀,下划线后是变量名等等。表3.2是一些常用的命名规则。


本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/wujinglucky/archive/2010/07/29/5774539.aspx

MFC全局变量的方法有四种 【源码免费下载链接】:https://renmaiwang.cn/s/wgna9 在Microsoft Foundation Class (MFC)库中,全局变量的使用是常见的编程需求,尤其是在大型项目中,为了在多个类或函数之间共享数据,全局变量往往不可或缺。MFC提供了多种方式来实现全局变量,每种方法都有其特定的适用场景和优缺点。下面将详细介绍这四种方法。### 1. 常规C++全局变量这是最基础的方法,适用于不涉及MFC特定类型的全局变量。在MFC应用的任何源文件中(通常是`.cpp`文件),你可以在全局作用域定义一个变量:```cppextern int g_GlobalInt; // 声明int g_GlobalInt = 0; // 定义```在这里,`g_GlobalInt`是可以在程序任何地方访问的全局变量。但需要注意的是,全局变量可能引发数据竞争和难以调试的问题,尤其是多线程环境下。### 2. MFC应用程序全局对象MFC提供了一个名为`CWinApp`的类,它是每个MFC应用程序的核心。你可以通过继承`CWinApp`并添加成员变量来创建全局对象:```cppclass CMyApp : public CWinApp{public: int m_GlobalInt;};// 在CMyApp的初始化代码中赋值CMyApp theApp;theApp.m_GlobalInt = 0;```这种方式的全局变量具有MFC生命周期管理,并且只在应用程序实例中可用。但同样要注意,过多的全局状态可能导致复杂性增加。### 3. MFC全局对象(Singleton)MFC支持单例模式,用于创建一个类的全局实例。例如,你可以创建一个单例类`CGlobalData`来存储全局数据:```cppclass CGlobalData{private: CGlobalData() 立即下载

相关推荐

Altium Designer许可证冲突?手把手教你用Windows防火墙彻底禁止AD联网(附详细截图)

本文详细介绍了如何通过Windows防火墙精准管控Altium Designer的网络权限,解决许可证冲突问题。通过配置入站和出站规则,彻底阻断AD的联网行为,提升软件运行效率。适用于需要稳定使用Altium Designer的工程师,附有详细截图和高级验证方法。

weixin_38170137的博客 423

MFC中如何定义全局变量

MFC中如何定义全局变量 3种方法: 1、在一个cpp文件中用extern声明,然后在其他文件中定义就可以用  2、全局类的对象来实现  3、在**APP类中做公有变量,其他类中用AfxGetApp()得到一个App对象指针就可引用   4、专门写一个全局类,里边的变量及方法全部声明为静态 ===========================================

imxiangzi的专栏 3万+

IP白名单校验

支持格式: 1、127.0.0.1 // 指定固定IP 2、127.0.0.1-127.0.0.128 // 可使用“-”来表示一个IP区间,支持跨IP段(一般不会出现这种情况,跨IP段则配置多个规则) 3、127.0.* // 2~4位IP段可...

2199

终于搞定了mfc声明全局变量

1、先建立一个基于对话框的工程,命名为test 2、在自定义一个类,用于封装全局变量和全局函数,如CPublic,基类随便定义吧,我用的是CDialog 3、在Public.h中Class Public下声明静态全局变量和全局函数,如    class CPublic : public CDialog { // Construction public:  CPublic(CWnd

Xuqingquan0926的博客 9572

Dify部署后访问报502?手把手教你排查和修复Nginx反向代理问题

本文针对Dify部署后常见的502 Bad Gateway错误,提供了从基础容器状态检查到Nginx配置与Docker网络诊断的完整排查流程。详细解析了错误本质,并给出动态服务发现修复与静态IP配置两种解决方案,帮助开发者彻底解决Nginx反向代理问题,确保Dify平台稳定访问。

rnn9storyteller的博客 1096

LangChain + PlayWright实战:5分钟搞定网页自动化测试(附完整代码)

本文详细介绍了如何利用LangChain与PlayWright构建智能网页自动化测试系统。通过环境配置、核心架构设计、实战Agent构建及性能优化等步骤,开发者可以快速实现高效的Web操作自动化,提升测试效率。文章还提供了完整代码示例和典型问题解决方案。

weixin_27791839的博客 239

mfc 全局变量

<br />用MFC制作的工程由很多文件构成,它不能象一般C++程序那样随意在类外定义全局变量,在这里要想定义能被工程内多个文件共享的全局变量和函数必须用一 些特殊方法才行。实际上有多种方法可以实现,这里只介绍两种方法。 <br /><br />    一、在应用程序类中定义<br /><br />    用MFC生成的工程中都有一个名为CxxxApp的类,它派生于CWinApp类。这个类主要进行程序的初始化,生成文档、视图对象等工作。我们可以把 需要全局访问的变量和函数定义为这个类的成员变量和成员

r91987的专栏 1028

华为防火墙 策略路由实现多ISP接入Internet

PC3上网访问Server1时走ISP1。PC4上网访问Server1时走ISP2。1、配置接口IP并加入相应的安全区域。二、ISP2 运营商 R2路由器。一、ISP1 运营商 R1路由器。

一直被模仿,从未被超越 3015

MFC全局函数

MFC中有不少的全局函数,方便在不同对象中获取不同的内容或创建不同的对象。主要全局函数有:AfxWinInit()  AfxBeginThread()  AfxEndThread()  AfxFormatString1()  AfxFormatString2()AfxMessageBox()  AfxOutPutDebugString()  AfxGetApp()  Afx

leaf6094189的专栏 744

DETR系列文章之–Co-DETR

Co-DETR,并行训练多个辅助头,以一对多的标签分配方式进行监督从辅助头中提取正样本坐标,为解码器中的正样本的训练效率进行额外的定制化正样本query.一对一标签分配:每个GT框分配给一个特定的query(DETR),较少的正query导致低效训练,从编码器生成的潜在表示和解码器中的注意力学习分析这一问题。一对多标签分配:每个GT框分配给检测器输出的多个proposal/anchor,依赖NMS或者anchor生成(ATSS,RetinaNet,FCOS,PAA)。

weixin_43731232的博客 2110

SQL注入详解

SQL注入(SQL Injection)是一种常见的Web安全漏洞,主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数据库受损(被脱库、被删除、甚至整个服务器权限陷)。 即:注入产生的原因是后台服务器接收相关参数未经过滤直接带入数据库查询...

渗透之路,攻防之间皆学问 26万+

【MFC学习笔记2】MFC中的数据类型,全局变量,全局函数和宏。

 1、MFC中的数据类型: BYTE、WORD、DWORD分别为8位,16位,32位无符号整型; LONG为32位有符号整型,UINT为32位无符号整型; BOOL、BSTR为32位字符指针; LPCSTR、LPSTR分别为字符串常量、变量的32位指针; LPCTSTR、LPTSTR分别为用于Unicode和DBCS的字符串常量、变量的32位指针; LPCRECT为一个指向RECT结构体常量的32

芋头CF的专栏 2551

大模型——AI对话四象限

{ "摘要": "文章揭示了90%的人不会有效与AI沟通的问题,指出简单粗暴的提问只能得到标准答案。作者提出'AI对话四象限'模型:1)双方都懂时提效;2)AI懂但需学会分层提问;3)共同探索未知领域;4)向AI传授独家知识。强调沟通技巧的重要性,认为会提问的人不会被AI替代。最后呼吁读者尝试四象限思维,与AI碰撞火花。" }

312

在mfc中使用线程局部数据tls

对于局部变量,不同的线程每一次调用函数时都会在栈上得到该变量的一份新的拷贝,全局的和静态的变量则只有一份实体,MFC提供了一种机制,使得可以像定义全局变量一样定义线程局部数据,所谓线程局部数据是指对于每一个访问它们的线程都会有一份只属于该线程的拷贝。可使用宏THREAD_LOCAL(class_name, ident_name)定义线程局部数据,THREAD_LOCAL定义如下:#defi

duyanning 1905

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

mfc4

mfc4 2010年03月17日   VC编程技术点滴(一)MFC编程基础      (2009-05-11 11:07:43)   标签: vcmfc编程sdk编程it分类:VC学习点滴   [b]一、传统的Windows编程--SDK编程[/b]   SDK 就是 Software Development Kit 的缩写,即“软件开发工具包”。这是一个覆盖面相当广泛的名...

adh275ni 237

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

MFC对话框之间自定义消息传递

网上讲述的都是基于框架类得消息的传递,本文所讲述的是两个对话框之间自定义消息的传递。 首先完成需要接受消息的类中消息的自定义: MFC自定义消息四步曲 1. 定义全局变量或宏 #define WM_MyMessage (WM_USER + n) n为数字到少大于100 或者用 con...

chunkezha7046的博客 750

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

MFC 自定义消息

<br />http://laokaddk.blog.51cto.com/MFC 自定义消息四步曲2008年07月27日 星期日 上午 08:04<br /> <br />1. 定义全局变量或宏<br /><br />#define WM_MyMessage (WM_USER + n)<br />n为数字到少大于100<br />或者用 const UINT WM_MYMESSAGE = WM_USER + n<br />一般可以加在stdafx.h 或resource.h 或*.app.h中。<br />

crane 430

Android设备远程adb调试:原理、连接方式与实战指南

在Android开发与测试中,设备调试通常依赖USB线连接,但当设备被固定在机柜、测试架或嵌入到电视盒子、工控屏等无屏环境中时,远程调试就成为了刚需。adb远程连接的核心原理是将原本的USB通道替换为TCP/IP网络通道,让电脑通过局域网直接与设备端的adbd守护进程通信。无论是Android 11及以上的原生无线调试,还是传统USB引导的tcpip模式,本质上都是建立一条可靠的网络调试链路。这项技术能显著提升日志抓取、应用安装、界面操控和多设备管理的效率,尤其适合长时间无人值守的崩溃复现、硬件联调与自动化

weixin_33754065的博客 387

C++变量命名规则 (转)

C++变量命名规则 a Array 数组 b BOOL (int) 布尔(整数) by Unsigned Char (Byte) 无符号字符(字节) c Char 字符(字节) cb Count of bytes 字节数 cr Color reference value 颜色(参考)值 cx Count of x (Short) x的集

zmjingying的专栏 799

DLL函数

关于DLL的函数:         动态链接库中定义有两种函数:导出函数(export   function)和内部函数(internal   function)。     导出函数可以被其它模块调用,内部函数在定义它们的DLL程序内部使用。         输出函数的方法有以下几种:         1、传统的方法         在模块定义文件的EXPORT部分指定要输入的函数或者变量。语法格

Johnny的专栏 1169

error:LNK2005 函数已经在*.obj中定义

出现上面的错误,只要原因有如下几个: 1.头文件的重复包含 包含的头文件中含有变量、函数、类的定义,在其他使用的地方多次包含,造成重复包含,产生LNK2005错误, 有两种解决方法: 1)使用宏 在头文件head.h中加入 #ifndef HEAD_H_ //这个地方写法有不少 #define HEAD_H_ ...... #endif 2)使用预编译,文件开头加入 #pr...

hanzhen7541的博客 2万+

关于dll的函数

关于dll的函数:         动态链接库中定义有两种函数:导出函数(export   function)和内部函数(internal   function)。     导出函数可以被其它模块调用,内部函数在定义它们的dll程序内部使用。         输出函数的方法有以下几种:         1、传统的方法         在模块定义文件的export部分指定要输入的函数或者变量。语法格

坚持,才是力量.老实做人,踏实做事. 879

error LNK2005: 已经在*.obj中定义

为什么会出现这个错误??“error LNK2005: 已经在*.obj中定义”   编程中经常能遇到LNK2005错误——重复定义错误,其实LNK2005错误并不是一个很难解决的错误,弄清楚它形成的原因,就可以轻松解决它了。造成LNK2005错误主要有以下几种情况: 1.重复定义全局变量。可能存在两种情况: A、对于一些初学编程的程序员,有时候会以为需要使用全局变量的地方就可...

icebergliu1234的博客 8941

关于DLL的函数

关于DLL的函数:         动态链接库中定义有两种函数:导出函数(export   function)和内部函数(internal   function)。     导出函数可以被其它模块调用,内部函数在定义它们的DLL程序内部使用。         输出函数的方法有以下几种:         1、传统的方法         在模块定义文件的EXPORT

287

C++排雷:27.error:LNK2005 已经在*.obj中定义 的原因分析及对策

https://www.cnblogs.com/MuyouSome/p/3332699.html

今天写代码了吗 1万+
上一篇: MFC中DoDataExchange()的作用
下一篇: MFC 类
AngelTempt
博客等级 码龄17年 12粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值