大家好,我是你的MFC编程小导师!上次我们聊了MFC的框架结构,今天咱们深入点,聊聊MFC里的“明星”类和函数。这些家伙是MFC的灵魂,让你开发Windows应用像玩积木一样简单。典型类有CString(字符串高手)、CRect(矩形计算器)、CDialog(对话框大管家)等等。因为篇幅有限,我重点pick CString来细聊,其他的你自己探索(类定义里藏着宝藏)。然后再说说那些以Afx开头的函数,它们像便利店一样,随时随地可用。
为什么学这些?因为MFC本质上是类和函数的乐园。掌握它们,你就能少写代码、多出效率。别担心,我会用接地气的语言讲解,专业术语点到为止,还加点小幽默,让你边笑边学。准备好键盘,咱们上车!
MFC典型类:CString – 字符串界的“变形金刚”
MFC里有好多封装好的类,帮你处理常见任务。比如CString,就是专门管字符串的“多面手”。它不像C++标准string那么“原始”,MFC给它加了buff:自动管理内存(不用你操心大小)、轻松拼接、各种操作一键搞定。比喻成:string是自行车,CString是电动车,还带自动巡航。
CString的使用频率高到爆!在MFC程序里,随便哪里都能用它。关键是:看类的定义,关注方法的参数和返回值就好。别纠结底层怎么实现的(MFC已经封装成黑箱),用起来像调用老朋友。
来看个示例代码,我用_T()宏(支持Unicode,防乱码),一步步演示:
// CString 使用方法示例:玩转字符串
CString strTemp = _T("MFC Tutorial"); // 初始化一个CString,简单吧?
// (1) 获取字符串长度(空格也算哦!)
// 结果:iLength = 12
int iLength = strTemp.GetLength(); // 像问“哥们,你多长?”一样直接
// (2) 获取第三个字符(索引从0开始,第二个参数是2)
// 结果:cFlag = 'C'
char cFlag = strTemp.GetAt(2); // 像从字符串里“抠”出一个字母
// (3) 数据类型转换:char转CString(Format是万能格式化器,后面章节深挖)
// 结果:strS = _T("C")
CString strS = _T(""); // 先建个空壳
strS.Format(_T("%c"), cFlag); // 格式化注入,超级灵活!
// CString::Format是 MFC 的格式化函数,用于将数据按指定格式转换成字符串。其语法为 Format(格式字符串, 参数...),其中格式字符串(如 _T("%c"))定义转换规则(%c转字符,%d转整数,%s转字符串等),后续参数按顺序填充。例如 strS.Format(_T("%c"), 'A')会将字符 'A'转为字符串 "A"。支持 Unicode(_T()或 L"")和多字节编码,适用于各类数据转字符串操作。
// (4) 字符串比较(Compare):严格匹配,大小写敏感
// 结果:iResult0 = 0(一致);iResult1 = -1(不一致);iResult2 = 1(字典序不同)
int iResult0 = strTemp.Compare(_T("MFC Tutorial")); // 完全一样,返回0
int iResult1 = strTemp.Compare(_T("MFC TutorialX")); // 多了一个X,返回-1
int iResult2 = strTemp.Compare(_T("MFC TutoRiaL")); // 大小写不同,返回1
// strTemp.Compare(_T("MFC TutoRiaL"))是 CString的字符串比较函数,区分大小写。如果 strTemp在字典顺序上 大于 参数字符串(如 "MFC TutoRiaL"),返回 1;若 小于 返回 -1;完全相等返回 0。例如,若 strTemp = "NFC"('N' > 'M'),返回 1。注意:大写字母(ASCII 值较小)比小写字母(如 'a'=97)优先级低,因此大小写不同会影响结果。
// (5) 不区分大小写比较(CompareNoCase):忽略大小写,友好多了
// 结果:iResult3 = 0;iResult4 = 0;iResult5 = -120(长度或内容不同)
int iResult3 = strTemp.CompareNoCase(_T("MFC Tutorial")); // 一样,返回0
int iResult4 = strTemp.CompareNoCase(_T("MFC TutoRiaL")); // 大小写无视,返回0
int iResult5 = strTemp.CompareNoCase(_T("MFC TutoRiaLX")); // 多X,返回负值
// (6) 转小写:全变小
// 结果:strLower = "mfc tutorial"
CString strLower = strTemp.MakeLower(); // 像给字符串“洗澡”去掉大写
// (7) 转大写:全变大
// 结果:strUpper = "MFC TUTORIAL"
CString strUpper = strTemp.MakeUpper(); // 吼一嗓子,全大写!
// (8) 逆序字符串:反转一下
// 结果:strReverse = "lairotuT CFM" // 注意,原strTemp被修改了!
CString strReverse = strTemp.MakeReverse(); // 像镜像翻转,趣味操作
对这些代码的吐槽与Tips
透明封装,傻瓜式使用:CString是MFC的礼物,这些方法(GetLength、Format等)都是现成的。你不用懂它怎么分配内存(自动的!),只需看原型:比如GetAt(int index) 返回char,参数是索引。其他MFC类(如CRect的Width()算宽度)同理。体会一下:这就像用手机App,不用知道代码怎么写的,直接戳按钮。
广泛应用,实战为王:CString在读文件、UI显示、数据处理到处可见。后面章节有更多例子(比如拼接路径、解析输入)。源码库里有完整demo,赶紧下载玩玩。记住:多总结方法的使用模式,其他类(如CDialog的DoModal()显示对话框)也一样融会贯通。
幽默小贴士:如果字符串是你的“女朋友”,CString就是帮你哄她的“神器” – 自动调整大小、变大变小、反转心情,应有尽有!
MFC典型函数:Afx前缀的“全局便利店”
除了类,MFC还有一堆函数,以Afx开头。这些是“Application Framework”(应用程序框架)的产物 – 想想成一套现成模板,帮你组装程序。Afx函数是全局的!意思是:在代码任何地方调用,不用实例化对象。像便利店:开门即买,不用预约。
常见几个(不是全部,够你入门):
CWinApp* AfxGetApp();
:获取当前应用对象。像问“老板在吗?”,返回CTestOneApp之类的指针。HINSTANCE AfxGetInstanceHandle();
:获取程序实例句柄。Windows底层东西,常用于加载资源。HINSTANCE AfxGetResourceHandle();
:获取资源句柄。加载图标、字符串时用。int AfxMessageBox(LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0);
:弹消息框!最常用的,lpszText是消息文本,nType决定样式(OK、Yes/No等)。返回用户选择。
示例:想弹个警告?一行代码:
AfxMessageBox(_T("哎呀,出错了!"), MB_OKCANCEL); // 用户点OK或Cancel,返回相应值
为什么牛?因为全局可用,简化代码。MFC的框架把这些集成好,你设计程序时就像搭积木,用这些函数填缝。
结语:从入门到精通,就差你动手了
怎么样?CString的魔法和Afx函数的便利,是不是让MFC更有趣了?这些典型类和函数是MFC的“工具箱”,多用多练,你会发现开发Windows应用超高效。别光看,赶紧在VS里新建MFC项目,复制代码试试。后面章节会深挖数据转换、更多类示例。
有问题?评论区吐槽吧!点赞收藏转发,一起成为MFC高手~
(本文原创,基于MFC基础知识。欢迎交流,转载请注明出处。敲代码快乐!)