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

MFC中定义全局变量和全局函数的方法 使用Visual C++6.0 中的MFC 基本应用时, 由于 MFC 制作的工程由很多文件构成, 它不能象一般C++程序那样随意在类外定义全局变量, 那样有时会在运行程序时出现问。 在软件开发过程中, 有时需要在不同的类之间利用全局变量传递数据, 利用全局函数处理相同问题, 阅读详情
 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位指针;
 LPVOID为未指定类型的指针。
 LPARAM、LRESULT分别作为传给Windows过程的参数和从Windows
过程返回的结果的32位值。
 WPARAM也是作为传给Windows过程的参数的值,但可以是16位
(Windows3.1)或32位(Win32)的。
 WINDPROC为指向Windows过程的指针。
2、全局变量:
 MFC中的全局变量都已afx为前缀,主要有两类,一类是用于全局应用程序对象的,有afxCurrentAppName、afxCurrentWinApp、
afxCurrentInstanceHandle、afxCurrentResourceHandle等4个,分别用于
保存全局应用程序对象的名字、指针、当前实例句柄、当前资源句柄。
另一类是用于诊断信息的,有afxDump、afxMemDF、afxTraceEnabled、
afxTraceFlags、afxCheckError等5个,分别用于发出CDumpContext信息
给调试窗口、控制调试时内存分配器的行为、控制宏TRACE的输出、打开
MFC内建的报告特征、测试错误情况。
3、全局函数:
 MFC类库定义的全局变量函数主要有5类,包括用于全局应用程序
对象的、用于诊断信息的、用于集合类的、用于引发异常类的、用于字符串
格式化和消息框显示的函数。
 (1) 用于全局应用程序对象全局函数
 afxGetAppName、afxGetApp、afxGetInstanceHandle、
afxGetResourceHandle、afxGetMainWnd分别用于获取全局应用程序对象的
名字、指针、当前实例句柄、默认资源句柄、当前主窗口。
 afxInitRichEdit、afxSocketInit、afxWinInit分别用于对RichEdit控件、WindowsSocket、控制台应用程序的初始化。
 afxRegisterWndClass用于对一个用户窗口进行注册、并补充到
MFC自动注册的窗口类中;afxRegisterClass用于在DLL中注册一个窗口类。
 afxBeginThread、afxEndThread分别用于创建一个新线程、结束当
前线程;afxGetThread用于获得指向当前线程对象的指针。
 (2) 用于诊断信息的全局函数
 afxCheckMemory、afxEnableMemoryTracking、afxIsMemoryBlock
、afxIsValidAddress分别用于检查当前所有已分配内存的完整性、打开/
关闭内存跟踪、检验内存块是否合理分配、检验内存地址范围是否在程序
的界定内。
 afxDump用于转储一个对象的状态;afxDumpStack用于生成当前堆
栈的映像;afxIsValidString用于确定一个字符指针是否有效;
AfxSetAllocHook用于设置一个每当内存分配时调用的函数。
 (3) 用于集合类的全局函数
 CompareElements和CopyElements分别用于元素的比较和复制;
ConstructElements和DestructElements用于当一个元素被构造或被销毁时
完成任意所需的动作;HashKey用于计算一个哈希关键值;
SerializeElements用于把元素保存到一个档案中或从一个档案中恢复元素。
 (4) 用于引发异常的全局函数
 afxThrowArchiveException、afxThrowFileException、
afxThrowMemoryException、afxThrowNotSupportedException、
afxThrowResourceException、afxThrowUserException分别用于引发一个
档案异常、文件异常、内存异常、不支持异常、Windows资源没找到异常、
用户程序初始化异常。
 afxThrowOleException和afxThrowOleDispatchException分别用于
引发一个OLE异常和OLE自动化异常。
 afxThrowDAOException和afxThrowDBException分别用于引发一个
DAO数据库异常和DB数据库异常。
 afxAbort用于当产生文件分配表错误时终止应用程序执行。
 (5) 用于字符串格式化和消息框显示的全局函数
 afxFormatString1和afxFormatString2分别用于替换字符串表中的
一个字符串和两个字符串;afxMessageBox用于显示一个消息框。
4、预定义宏
 MFC预定义宏包括消息映射宏、运行时对象模型服务宏、诊断宏、
异常宏。
 (1) 消息映射宏
 可以接收消息和命令的所有CCmdTarget派生类都有自己的消息映射。框架利用消息映射把消息和命令与它们的处理函数链接起来。
 每个命令目标类的消息映射都由一组定义的宏组成,成为消息映射
宏。其中,宏BEGIN_MESSAGE_MAP和END_MESSAGE_MAP()用于将消息映射括起
来,其他宏(如 ON_COMMAND)则包含有消息映射的内容,宏的格式依据消息类型而定。
 (2) 运行时对象模型服务宏
 运行时对象模型服务宏分为3个层次,DECLARE_DYNAMIC用于支持运
行时获取类信息;DECLARE_DYNCREATE用于支持运行时动态创建并获取类信
息;DECLARE_SERIAL用于支持运行时数据序列化、动态创建并获取类信息。
这3个宏用在类声明中(.h文件)。
 (3) 诊断宏
 ASSERT宏用于当一个指定的表达式值为FALSE时打印一个消息,然
“流产”该程序;
 (4) 异常宏
MFC 单文档的全局变量 单文档中每个view类中有自己的局部变量,所以在应用程序中定义全局变量要在这些View类啊,Doc类啊的外面。 待解决问题:希望对每处理一个文件,全局变量+1(如图1所示,期望处理后结果为5,CVMFC1不算) ok,问题实际上是MFC中如何设置和操作全局变量 首先我们讲下最简单的解决方案,后面在分析下MFC原理(*^__^*)  ===================== 阅读详情

相关推荐

VC++中全局变量的问题(转)

全局变量一般这样定义:1。在一类的.cpp中定义 int myInt;然后再在要用到的地方的.cpp里extern int myInt;这样就可以用了。2。在stdafx.cpp中加入:int myInt;然后在stdafx.h中加入:extern int myInt这样定义以后无论在什么文件中都是可见的.3。比较规范的是,先定义一个Glbs.h,把所有的全局变量原始定义放进去。然后定义一

znsky的专栏 8394

MFC 如何将DWORD类型转换成CString放入ListBox中

问题来源描述:这个问题是我在用MFC写内存修改器的时候碰见的,我有一个DWORD[ ]类型,如何将它转成字符串放入ListBox中呢? 解决这一问题需要用到Format函数,这个函数是CString中自带的一种方法,我们只需要声明一个CString的变量CString strTemp;,然后用 strTemp.Format(TEXT("%X"), dwAddrList[i]); 其中dwAddrList的定义在这里,DWORD dwAddrList[KPAGE] = { 0 };,KPAGE不用管它,

weixin_43929310的博客 1388

C++中 DWORD和int的区别

INT 代表int, DWORD 代表 unsigned long int会随着机器位数的不同而发生变化,比如在16位机上为16为,在32位机上为32位,在64位机上为64位。看看最原始的定义就知道了。 DWORD是无符号的,相当于unsigned long ,它是MFC的数据类型。 而int是有符号性的,而且他所占的字节数不一定是4个,主要和你的 IDE有关,像在Turbo C中就是2个字节,VC6.0中就是4个字节 切忌把 int 看成 32 位 书中早就说了 long 32位有符号整数 int

东方猫的博客 1334

MFC常用技巧

C、当某个api函数的 out参数能返回一个指针时,应小心谨慎处理参数 ,在win32中,可以把一个ulong变量的地址进行强制转换后传递给api函数,返回的指针就保存在 ulong变量中,但在win64中,返回的指针有64位,如果使用ulong变量的话就会破坏其他变量的内容,正确并且简单的方法是直接定义一个指针变 量,把指针变量的地址作为参数传递给api函数。另外,由于handle实质上是一个指针(void *),因此把handle转换成long或ulong等类型也是不正确的。

zhaopeng01zp的博客 1754

解锁 STP 与 SOLIDWORKS 转换密码:工具及迪威在线转换秘籍

STP 文件能够完整地记录 3D 模型的几何形状、尺寸、公差、材料属性等丰富信息,无论是简单的机械零件,还是复杂的装配体,都能精准呈现。而在线转换以迪威模型为例,凭借便捷性、高效性和安全性,为广大 3D 专业技术人员和学生党在无需安装额外软件的情况下,轻松实现格式转换提供了有力支持。在实际工作和学习中,可根据自身具体情况灵活选择合适的转换方式,以确保 3D 设计工作流程的顺畅进行,让创意在不同格式间自由流动并绽放光彩。在 3D 设计与建模的广袤世界里,不同格式文件间的转换常常是连接创意与实现的关键桥梁。

技术说明博主 3445

别再让COGI拖慢你的SAP接口!手把手教你配置BAPI_PRODORDCONF_CREATE_TT的同步货物移动

本文深入解析SAP生产订单报工接口中的COGI问题,通过BAPI_PRODORDCONF_CREATE_TT的同步配置实战,解决异步更新导致的性能瓶颈。文章详细介绍了增强点配置和性能验证,帮助用户彻底消除COGI堆积,提升接口效率。

weixin_29214691的博客 482

触发ASSERT(afxCurrentResourceHandle != NULL)错误的原因

Debug Assert error afxwin1.inl line:22 翻译参考 http://wenku.baidu.com/view/146a503987c24028915fc3f6.html 上述错误出现的原因有两个情况,一是对于控制台程序,使用MFC却没有初始化;二是使用MFC编写dll,对导出函数没有响应的宏声明。 一是对于控制台程序,使用MFC却没有

循序渐进,可收宏效 8127

深入解析Android Thermal框架:从应用层到驱动层的温度管理机制

本文深入解析Android Thermal框架的温度管理机制,从应用层到驱动层详细介绍了温度监测、热状态评估和降温策略执行的全过程。通过分层架构解析和关键组件交互,帮助开发者理解Android设备如何实现高效的温度控制,确保硬件安全并优化性能。

weixin_29303701的博客 256

MFC的数据类型

MFC数据类型分为3类     Array:数组     List:双向链表     Map:又称为Dictionary,其内对象成对存在,一为键值对象(key object),一为实值对象(value object) . MFC Collection classes所支持的对象中,有两种特别需要说明,一是Ob,一是Ptr:     Ob表示派生自CObject的

fanwenyuan_fwy的专栏 800

eNSP与我这24H2版本不兼容,路由器40错误。这该怎么处理(操作系统-windows)(相关搜索:虚拟机)

🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

**My Coding Family** 4110

《嵌入式最全面试题-Offer直通车》目录

嵌入式领域蓬勃发展,嵌入式工程师成为众多科技企业争抢的热门人才。如果你渴望在嵌入式面试中脱颖而出,成功斩获心仪的 offer,那么《嵌入式最全面试题 - Offer直通车》将是你的绝佳选择。本专栏是优快云是热门专栏,100多篇文章,总字数过百万。每月新增订阅用户过百,现在是优惠价9.9元,后面要逐渐恢复原价,早订阅早受益。本专栏精心整理了众多超万字的精华内容,总计达数十万字的嵌入式面试题总结。涵盖从嵌入式基础知识到各大厂面试真题,从驱动开发到操作系统,从硬件到软件等各个方面。

大模型大数据攻城狮的专栏 8401

在MFC下如何定义全局变量和全局函数

<span style="font-size:12.0pt;font-family:宋体;mso-bidi-font-family:宋体;mso-font-kerning: 0pt;" >用MFC制作的工程由很多文件构成,它不能象一般C++程序那样随意在类外定义全局变量,在这里要想定义能被工程内多个文件共享的全局变量和函数必须用一些特殊方法才行。实际上有多种方法可以实现,这里只介绍两种方法。

ZhangZX的专栏 6028

枚举 ACS 电机状态位 完全解析

本文解析了ACS运动控制器SDK中的MotorStates枚举,该枚举对应控制器状态标志位?MFLAGS。主要介绍了6个核心状态:ACSC_ALL(-1)表示所有轴,ACSC_NONE(0)为空闲状态,ACSC_MST_ENABLE(1)为轴使能,ACSC_MST_INPOS(16)表示到位,ACSC_MST_MOVE(32)为运动中,ACSC_MST_ACC(64)为加速中。文章还补充了完整的枚举定义,包含报警、回零等状态,并提供了在晶圆AOI4轴运动中的典型应用场景,如判断轴状态、运动条件等。最后强调只

StevenChen的博客 246

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

<br />MFC和Windows程序一样,使用大量的宏,宏不带任何前缀,全由大写字母表示。 <br />1. MFC提供的主要宏:<br />•  消息映射宏: 声明消息映射表 (将于3.2.2节介绍)宏DECLARE_MESSAGE_MAP、定义消息映射表宏BEGIN_MESSAGE_MAP和END_MESSAGE_MAP对、消息映射表入口宏ON_加消息名。<br />•  动态 MFC对象宏: DECLARE_DYNCREATE和DECLARE_DYNAMIC, IMPLEMENT_DYNCREATE

AngelTempt的专栏 1183

2024 全国大学生新质生产力大赛 B:金融违规交易的大数据分析 问题四思路代码

问题四:请分析附件中所有的指标数据,选取合适的指标,建立“金融违规 洗钱交易的预测模型”,并选取合适的训练集和测试集,计算预测模型的准确率。 为了提前识别并预测金融违规洗钱的交易事件,请基于你们团队数据分析的结果, 分别给公安部门和银行机构提出你们的建议。

YOLO 375

使用 Visual Studio Code 搭建 SAP UI5 本地开发环境

工欲善其事,必先利其器。时至今日,SAP 提供了非常多的 SAP UI5 开发工具,既包含本地搭建的,也包含浏览器里远端使用的工具,比如 WebIDE 和 Business Application Studio. 我们访问下面这个链接,就能找到所有这些工具的安装或者配置步骤: https://tools.hana.ondemand.com/#sapui5 如果想选择本地开发,SAP 推荐的工具是 Visual Studio Code,也就是本文要介绍的内容。 也可以下载 WebIDE 的本地安装包,将其安

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1万+

在VC++MFC下如何定义全局变量和全局函数

作者:风林 来源:风林的家 -------------------------------------------------------------------------------- 用MFC制作的工程由很多文件构成,它不能象一般C++程序那样随意在类外定义全局变量,在这里要想定义能被工程内多个文件共享的全局变量和函数必须用一些特殊方法才行。实际上有多种方法可以实现,这里只介绍

l460602540的专栏 4543

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

MFC中如何定义全局变量

MFC中如何定义全局变量 3种方法:1、在一个cpp文件中用extern声明,然后在其他文件中定义就可以用 2、在**APP类中做公有变量,其他类中用AfxGetApp()得到一个App对象指针就可引用 3、专门写一个全局类,里边的变量及方法全部声明为静态 具体说明如下(来自网络): 最好在.cpp 中声明,如果其它文件用到这个变量,就用extern 就行了 1.cpp int x ...

ygfenghuang的博客 3273

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

MFC全局变量的定义和使用

我在编程的时候也经常遇到一些错误:gj.obj : error LNK2001: 无法解析的外部符号 "int gg" (?gg@@3HA) gjDlg.obj : error LNK2001: 无法解析的外部符号 "public: static int CgjApp::g_gl" (?g_gl@CgjApp@@2HA) Debug/gj.exe : fatal error LNK1120:

berniebd的专栏 1850

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

如何在MFC中添加全局变量和全局函数

全局变量和全局函数最好集中封装,不要在文档、视图等类内部定义,这样用起来才有全局的感觉。 例: 1、添加一个没有基类的新类,设类名起为CPublic,姑且称之为公用类 单击“Insert”菜单下的“New Class”命令,选择“Class type”为“Generic Class”,在“Name”栏中填入类名“CPublic”,单击“OK”,则新类建立完毕。 2、包含公用类的头...

abc13848089196的博客 499

在MFC下如何定义全局变量和全局函数(转)

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

boy141441的专栏 698
上一篇: CStdioFile类打开文件,用TextOut输出时乱码……
下一篇: 【MFC学习笔记3】ASSERT()函数用法,CFileFind Class 说明。
芋头CF
博客等级 码龄18年 28粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值