前言:因为接手了C++MFC的程序,所以需要对MFC编程方面有所了解。
C++之MFC简单入门
- MFC相关的概念
- MFC
- WIN32
- QT
- MFC项目基本操作
- MFC项目创建
- MFC项目文件解读
- 界面和代码数据交互——加法器
MFC相关的概念
MFC
MFC(Microsoft Foundation Classes微软基础类库):微软公司提供的一个类库,以C++类的形式封装了Windows API,并且包含一个应用程序框架,减少应用程序开发人员的工作量。
WIN32
WIN32程序和MFC程序生成的都是Windows应用程序。
WIN32开发:是windows下的最基本的编程方式,用Window提供的API(Application Programming Interface)为Window编写应用程序。
MFC封装了WindowsAPI,也相当于对WIN32封装。比起WIN32来说,MFC应用程序开发工作量简化了不少。但由于MFC是封装了Win32编程,所以在效率和灵活性上肯定没有Win32编程好。此外WIN32开发是面向过程的程序,而MFC开发则是面向对象。
QT
MFC和QT两者都是用于C++图形用户界面应用程序。
QT:跨平台C++图形用户界面应用程序开发框架,可以开发GUI程序也可以非GUI。QT是面向对象编程的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,Qt很容易扩展,并且允许真正地组件编程。
MFC和QT的区别:
- 跨平台方面,QT跨平台,可以在Windows、Linux、Mac等多平台开发;MFC因为是封装Windows API,所以只能用于Windows平台。
- GUI界面方面,QT做GUI开发比MFC好,而且支持CSS,界面设计更加方便和美观。
- 程序运行效率方面,MFC比QT高,因为MFC是浅层封装,而且VC对Windows进行了针对性优化,所以性能比较好。不过现在主流计算机系统的配置上来了,这点性能差别基本不介意。
- 发展上来说,QT一直在更新,而MFC在很多年前就已经停止更新了。不过MFC还是被保留了下来,因为过去很多软件还是用MFC开发,用户量还是比较大,重写工作量无法估计,所以短时间内QT还很难撼动MFC地位。
- 设计上来说,MFC是伪对象,而QT是真对象。MFC本质是访问包装起来C语言编写的Windows API,还是事件驱动的架构。而QT则是用C++编写的,是精心设计的卖你想对象,在命名,继承,类的组织等方面保持了优秀的一致性,代码写起来比较优雅。
- 创建界面上,MFC无法创建大小动态可变的子窗口,必须用代码来更改,软件国际化麻烦,需要对每个语言的版本重新修改软件,而QT有强大的layout机制。
- 文档帮助上,MFC提供了帮助文章MSDN需要单独付费而且还非常庞大,链接设计也一般,很难通过一个类跳转到相关的类。而QT帮助文档设计非常优秀,只有18M。
MFC项目基本操作
MFC项目创建
点击VS新建一个MFC项目,通常会有四个引用程序类型:单个文档、多个文档、基于对话框以及多个顶层文档(不常用)。
单个文档只有一个窗口,同一时刻只能操作一个文档,例如记事本。
多个文档可以有多个子窗口,允许同时操作多个文档,例如Notepad++。
基于对话框没有菜单、工具栏及状态栏,也不能处理文档。
MFC项目文件解读
创建了一个基于对话框的项目。
头文件:存放.h后缀的头文件。
源文件:存放.cpp后缀的文件。
资源文件:存放mfc界面相关的资源文件。
pch:预编译文件,可以把自己需要预编译的内容放入。预编译是程序正式编译前做一些代码文本的替换工作,这样调用这段代码时候就不需要进行调用的入栈出栈,节省时间,通常针对那种改动不大的代码。
targetver.h:定义程序运行的环境。如限制程序只能在XP下运行,限制程序在只能在Vin7下运行,或限制程序只能在XP以上系统运行。
Resource.h:就是资源文件中.rc后缀文件的头文件。
资源文件:ico是图标,rc和rc2是mfc界面的资源文件,指向同一个资源。但是rc2可以可视化编辑,而rc需要代码手工编辑。双击rc2后缀文件,然后找到Dialog文件下DIALOG后缀的的,双击即可查看对应可视化编辑的界面。
MFCApplication1:该类继承CWinApp,封装了关于程序流程的操作。相当于整个程序的主程序,程序主入口其实也是在这里头。
MFCApplication1Dlg:该类继承CDialogEx,封装了关于对话框窗口的操作。也是此应用程序运行后控制对话框界面的程序部分。
界面和代码数据交互——加法器
- 第一步:编辑界面。
添加一个静态文本框(Static Text),用来显示加法结果,这个是用户没有办法修改的。
添加两个个编辑框(Edit Control),用来交互让用户输入,输入两个要相加的数字。
添加一个按钮(Button),用来确认交互,确认是否要相加。
控件右键选择“属性”,对“描述内容”进行修改,得到下图。
- 第二步:为控件添加变量。
对静态文本框(Static Text)和编辑框(Edit Control),右键选择“添加变量”,然后注意设置类型、名称和变量类型。
注意命名规则,类的成员变量名一般以m_打头,以标识它是一个成员变量。
注意文本显示,Static Text的属性ID改为IDC_TEXT,不然无法修改,而且是控件控制。
- 第三步:为button添加函数响应。
四种方法:- Class Wizard类导向添加:按钮右键类导向。对象ID选中自己要的按钮ID,消息为函数处理类型,选择BN_CLICKED,然后添加处理程序。
- Add Event Handler实践处理程序:添加消息处理函数,默认就是BN_CLICKED。
- 属性视图“闪电”图标:点击就可以直接加入了控件事件了。
- 双击按钮控件:双击后会自动添加消息处理函数,并跳转到代码部分。
// 加法按钮响应函数
void CMFCApplication1Dlg::OnBnClickedButton1()
{
//更新m_inputA,m_inputB获取界面输入的值
UpdateData(true);
//进行加法
int a,b,c;
a = m_inputA;
b = m_inputB;
c = a + b;
//结果显示
CString str1,str2;
str1 = "结果:";
str2.Format(L"%d", c);
m_textShow.SetWindowTextW(str1+str2);
}
- 第四部:添加一个标题。
找到OnInitDialog()函数部分,添加上自己想要的标题代码。
CString str;
str = "ADD";
SetWindowText(str);
结果: