MFC入门经典
今天向同学请教了下MFC的入门问题,当真有种“听君一席话,胜读十年书”的感觉。我个人以为每个学习C++控制台类型编程的新手都希望能够把小黑窗变为交互简单的窗口程序,这就促使我们学习MFC。
之前学习MFC最大的愿望就是可以吧之前写的Win32控制台程序轻松的转化到MFC界面程序上来,要实现这一点需要完成以下功能:
1.实现MFC控件(暂时为Edit控件)与数据的绑定,变量值可以在界面和后台之间传递
2.实现MFC事件响应和函数的绑定。
本文的主要目的不是教你如何使用VS“编写”MFC程序,而在于把我们之前养成的书写控制台习惯的代码合理的转化为MFC代码(前提是你的代码完全符合C++面向对象的标准)
首先明确一点MFC是纯C++面向对象风格的类库,故我们要写的后台程序必须全部要以类和类成员函数来实现<-这点非常重要。
下面就一个简单的加法界面程序作为加入MFC世界的敲门砖:
在正常的WIn32控制台程序中,我们如果编写一个面向对象风格的加法类代码如下:
class CAdd
{
public:
int a,b,c;
CAdd();
void add();
}
CAdd::CAdd()
{
a = 0;
b = 0
c = 0;
}
void CAdd::add()
{
c = a+b;
}
如果我们再加入main()函数然后传递点参数啥的,它就可以在黑框框里和用户“交互”了。但这不是我们想要的!!!
下面我们把上面的程序变成MFC对话框程序.
1.创建基于对话框的MFC项目
2.将下面代码加入到XXDlg.h中
class CAdd
{
public:
int a,b,c;
CAdd();
void add();
};
3.把下面代码加入到XXDlg.cpp中
CAdd::CAdd()
{
a = 0;
b = 0
c = 0;
}
void CAdd::add()
{
c = a+b;
}
4.现在代码是加进来了,下面要做的就是变量和文本输入框的绑定了,首先将向导创建的资源对话框改为下面的样子:
在属性栏中将三个示例编辑框的ID改为IDC_A,IDC_B,IDC_C(这么做完全是为了方便,也可以使用默认ID)。
5.下面一步是关键:变量a,b,c关联到三个示例编辑框中,这么做以后变量和编辑框之间就可以进行数据传递了。
别忘了在XXDlg类中创建一个CAdd的对象实例
public:
CAdd Add;
然后找到XXDlg类中的
void CADDDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}函数,在里面添加代码为—>
void CADDDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_A,Add.a);
DDX_Text(pDX, IDC_B,Add.b);
DDX_Text(pDX, IDC_C,Add.c);
}
下面三个语句就实现了文本编辑框A,B,C和变量a,b,c之间的绑定。
6.下面一步是将button的响应函数设置为我们的add()函数,具体代码如下:
void CADDDlg::OnBnClickedButton1()
{
UpdateData(true);//将控件的状态传给其关联的变量,当然你要为控件关联上变量才行。//用于将屏幕上控件中的数据交换到变量中。
Add.add();
UpdateData(false);//将控件的关联变量的值传给控件并改变控件状态。//用于将数据在屏幕中对应控件中显示出来
}
其中UpdateData()函数起到传递刷新数据的作用。
7.编译运行就可以得到下图的界面,单击button就可以实现加法
相关文章
- 进程同步-经典同步问题
- 算法系列15天速成——第三天 七大经典排序【下】
- 猜数游戏-人机对战-经典的randint使用
- 10大经典排序算法动图演示,看这篇就够了!(配相应代码)
- SSH, 整合分页功能,连带DAO经典封装
- 递归经典面试题_ 小例
- 《iPhone与iPad开发实战—iOS经典应用剖析》连载六
- 【BSP视频教程】STM32H7视频教程第14期:超干货,MPU和Cache实战,一张图了解所有经典配置案例,争取人人都可以玩溜(2022-05-08)
- Atitit order algo 排序算法 算法之道 目录 1.1. 生活中常用的排序是插入排序和选择排序2 2. 0.1 算法分类2 3. .2 算法复杂度3 4. 十大经典排序算法(动图
- Atitit 图像处理30大经典算法attilax总结
- 【数据结构与算法Python实践系列】5分钟学会经典排序算法-快速排序
- 管道命令和xargs的区别(经典解释)
- 白话经典算法系列之七 堆与堆排序
- Chromium 基础库使用说明(结合c++ 17入门经典 好好理解 非常重要)
- 《算法入门经典大赛——培训指南》第二章考试
- opencv经典算子原理总结+SIFT算法原理+特征匹配用于图像拼接
- tensorflow 入门经典实例