VS2015之博大精深的MFC项目开发(二)

本文档详细介绍了使用MFC进行项目开发的核心技术,包括CString类的深入应用、列表控件CListCtrl的定制开发、员工信息管理系统的完善以及记事本软件的实现等。通过实践案例展示了MFC类库的高级特性。

VS2015之博大精深的MFC项目开发(二)



第二章 MFC原理篇

1、MFC06-1:CString类的测试

在这里插入图片描述

在这里插入图片描述


1.1 operator+函数

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

那么两个TCHAR是否能相加呢?

在这里插入图片描述

错了,不能想加,我们学C语言的时候都知道,两个指针相减还是有道理的,两个指针相减是两个地址之间的距离,是一个整数;
但是两个指针相加那就没有道理了。
只有第一个是对象,或者第二个是对象,才可以无限的连加,后面再有多少个字符串就都没问题了。

在这里插入图片描述


1.2 Delete函数

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

我们在试试给参数nCount设为-1看看能不能删除到结尾:

在这里插入图片描述

在这里插入图片描述

我们看到参数2设为-1没有效果。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

我故意把参数2的值也得很长,程序也不会崩溃。


1.3 Find函数

在这里插入图片描述

在这里插入图片描述

我们发现没查找到,这是因为我们查找的那串字符不是个字符串。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

如果这个Find函数查不到的话就返回-1。

在这里插入图片描述

从第5个位置开始查找的话,字符a在整个字符串的第6个位置上。

在这里插入图片描述

大家在每要测试一个新的内容的时候,要新建一个按钮专门测试这个内容。

在这里插入图片描述


1.4 Insert函数

在这里插入图片描述

在这里插入图片描述

每测一个函数你要用心的把它用心的做一个按钮,好好的练一下。

在这里插入图片描述

在这里插入图片描述

在字符串中间某个位置插入的话:

在这里插入图片描述

在这里插入图片描述


1.5 切分函数(Mid、Left、Right)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Mid函数是一个功能全面的切分函数,用Mid可以代替Left和Right函数,当你要字符串左边3个或者字符串右边3个的话,用Left和Right比较方便。

在这里插入图片描述

在这里插入图片描述

如果要求从字符串第3个位置以后的部分,有几种方法可以实现呢?

  • 用Right函数来实现

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 用Mid函数来实现

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

第2个参数如果为-1的话不行,返回值为空。

在这里插入图片描述

我们发现第2个参数设置为字符串长度也可以,该值超长的话也不出错。

在这里插入图片描述

在这里插入图片描述

其实按照函数说明,不提供第2个参数的话,会一直到结尾;
单参数版本的Mid函数就是指从第几个位置开始一直到结尾。

在这里插入图片描述

所以说,Mid是功能最全面的切分函数,凡是Right能做到的,Left能做到的,Mid都能做到。

要切字符串右边的3个:

在这里插入图片描述

或者用单参数版本也行:

在这里插入图片描述

Mid函数也可以实现Left的功能:

在这里插入图片描述

在我们模拟CString类的时候,Left和Right的功能我们可以用Mid这个函数做出来。


1.6 其它函数

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这个nID参数是指资源中字符串表中的字符串,如果资源中没有字符串表,你可以加入一个;
字符串表中可以放一些测试的字符串:

在这里插入图片描述

IDS_TEST这个ID将生成到resource.h当中,因为它是一个资源的ID:

在这里插入图片描述

我们看到这是一个整数,那么这个整数我们在什么时候使用呢?
当你需要使用字符串列表中的文字的时候:

在这里插入图片描述

现在很少使用LoadString函数了,它主要是以前做多国语言版的时候用的,现在有Unicode的话就没必要做多国语言版了。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


1.7 反向查找函数ReverseFind

在这里插入图片描述

这个反向查找不支持查找一个字符串,只支持查找一个字符。

在这里插入图片描述

比方说当我们获得一个目录的时候,我们要从中找到当前的执行文件名:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

就得到了程序运行目录,这个是非常好用的,因为在我们程序运行目录下往往还会有一些图片,我们要加载与程序相同目录下的资源、一些文件的时候,这种方法还是非常好用的。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在windows下一般用\r\n更能准确的代表换行,在linux下一般直接就用\n代表换行。

在这里插入图片描述


2、MFC06-2:开发一个带列表控件的软件

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


2.1 Trim系列函数

在这里插入图片描述

在这里插入图片描述

不带参数的Trim只裁剪字符串两端的空格,中间的空格不裁剪。

在这里插入图片描述

在这里插入图片描述

中间如果有空格、括号等包含在要裁剪的字符集中的字符仍然不裁,Trim只裁剪左右两端的。

在这里插入图片描述

在这里插入图片描述


2.2 GetBuffer和ReleaseBuffer函数

这是两个CString类中非常有用的函数,也是最古怪的CString对象的成员函数。

在这里插入图片描述

我们经常有一些API的参数是C语言格式的字符串(LPSTR或者LPTSTR),我们想把它直接获取到CString对象里面去(API本来就不支持对象),这样的话以前我们比较笨的方法就是首先定义一个字符缓冲区:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

现在可以直接通过CString对象来获取缓冲区:
在这里插入图片描述

在这里插入图片描述

它会在内部的堆空间上去分配1000个,沿着这1000个去获取,获取完了之后必须要执行ReleaseBuffer函数,它是一个修复函数,必须要用ReleaseBuffer对这个str进行修复,因为在调用GetBuffer之前我们这个str的长度是空的,GetBuffer之后这个str的长度可能还是0,但是你经过ReleaseBuffer对这个str字符串进行修复之后,str将成为真正有用的字符串了,GetLength将会是实际获取到的那个字符串的长度:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

我们从上图可以看到,即使是str获取到了系统目录字符串,但是它的长度仍然为0,所以我们要用ReleaseBuffer这个函数对它进行修复一下,修复了之后这个字符串才成为真正可用的字符串:
在这里插入图片描述


2.3 开发一个带列表控件的软件(CListCtrl类)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

把按回车键默认关闭的代码注释掉,但是按ESC的话可以关闭,所以删除确定按钮,保留取消按钮。

ListBox是一个简易的列表,只有单行效果,现在一般都不用了;
现在凡是多行列表的都是ListControl:
在这里插入图片描述

在这里插入图片描述

上图这个Edit Labels可以让你实现,点击一个文件名,再点击一下就可以编辑这个文件名:
在这里插入图片描述

在这里插入图片描述

每一种控件都有自己对应的类,因为不同的控件有不同的操作。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

运行起来出错了,一定要记得点重试按钮,再点中断:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

双击打开你自己的程序代码,错误应该就是在刚编写的InsertColumn这一行上,没插进去,而且崩溃了。

在这里插入图片描述

我们首先看一下CListCtrl这个类的基类是什么:
在这里插入图片描述

在这里插入图片描述

而CWnd类核心的成员变量就是一个窗口句柄:
在这里插入图片描述

在这里插入图片描述

我们看到这个句柄是空的;
你创建了一个CListCtrl对象,你要拿这个对象去操作什么,比如说有5个ListControl控件,谁知道你要操作哪一个ListControl控件,你必须将这个CListCtrl对象和某一个控件的ID关联到一起,它没有关联到任何控件上,是不可以操作任何控件的,所以上面这样写是错的。

在这里插入图片描述

我们要看CWnd类的该成员函数,因为CWnd类是我们MFC的窗口类。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

接着我们点击添加按钮的时候插入行:
在这里插入图片描述

在这里插入图片描述

消息映射表中就是:一消息(WM_COMMAND)、一ID、一函数。

在这里插入图片描述

GetDlgItem函数的返回值说明中,上图所选这句话,是说该函数的返回值是一个临时性指针变量,不要把它储存到成员变量里长期使用;
就是说你每个消息处理函数中都通过GetDlgItem函数获取一下,因为它是一个临时性的,会随时被清理掉。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这个InsertItem函数是插入一行,它只能添加该行第一列的内容,后面列的内容就不支持添加了。

在这里插入图片描述

item就是指最左边的列这一项叫item,subitem就是右边剩余的项。

在这里插入图片描述

它不但可以设置最左边这一列的文字,也可以通过nSubItem设置其他列的文字。

在这里插入图片描述

在这里插入图片描述

我们看到最后的日期没有放进来。


3、MFC06-2:继续完善带列表控件的软件开发

通过上节课的学习,我们知道了CListCtrl类的InsertColumn是插入列,InsertItem是插入行,SetItemText可以设置每一行上每列的文字。

在这里插入图片描述

把SetItemText函数第2个参数设为0就

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值