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就可以实现加法

转自:http://lnlover.blog.163.com/blog/static/19803043220123681214867/
MFC入门经典的更多相关文章
- 强烈推荐visual c++ 2012入门经典适合初学者入门
强烈推荐visual c++ 2012入门经典适合初学者入门 此书循序渐进,用其独特.易于理解的教程风格来介绍各个主题,无论是编程新手,还是经验丰富的编程人员,都很容易理解. 此书的目录基本覆盖了Wi ...
- c++学习书籍推荐《Visual C++2008入门经典》下载
百度云及其他网盘下载地址:点我 <Visual C++2008入门经典>学习目标: 使用标准模板库(STL)来组织和操作本地C++程序中的数据 C++程序调试技术 构造Microsoft ...
- <Node入门经典>读书笔记
最近在读<Node入门经典>, 之前没有做笔记, 今天开始把看过自己又写了的代码放这里以免忘记. express var express = require('express') var ...
- 正经学C#_介绍与其编写基础:《c#入门经典》
本文所讲内容,均可在<c#入门经典>中可以查询.如有错误,敬请指出.谢谢! C#:全称C Shar.是微软.Net Framework平台下最为主要的客户语言之一.个人理解,c#是微软最为 ...
- SQL入门经典(十) 之事务
事务是什么?事务关键在与其原子性.原子性概念是指可以把一些事情当作一个执行单元来看待.从数据库角度看待.他是指应该全部执行或者全部不执行一条或多条语句的最小组合.当处理数据时候经常确保一件事发生另一件 ...
- 《Web编程入门经典》
在我还不知道网页的基础结构的时候,我找过很多本介绍Web基础的书籍,其中这本<Web编程入门经典>,我认为是最好的. 这本书内容很全面.逻辑很严谨.结构很清晰.语言文字浅显易懂. 看这本书 ...
- (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO
http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...
- 《c#入门经典第五版》简介及pdf电子书网盘下载地址(收藏)
<C#入门经典(第5版)>全面讲解C# 2010和.net架构编程知识,为您编写卓越C# 2010程序奠定坚实基础.C#入门经典系列是屡获殊荣的C#名著和超级畅销书.最新版的<C#入 ...
- [刷题]算法竞赛入门经典 3-12/UVa11809
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa11809:Floating-Point Numbers 代码: //UVa11 ...
随机推荐
- javascrip函数简单介绍
JavaScript 函数定义JavaScript 使用关键字 function 定义函数.函数可以通过声明定义,也可以是一个表达式.函数声明在之前的教程中,你已经了解了函数声明的语法 :functi ...
- H5测试
H5是什么? H5的全称是HTML5,其实就是:移动端WEB页面. H5与原生 APP的区别: APP是使用原生系统内核的,相当于直接在系统上操作,是我们传统意义上的软件,更加稳定. H5的APP先得 ...
- visual stdio 2012 c#学习笔记1
visual stdio 2012 c#学习笔记1 1 我在安装过程中选择的是英文版本,不过刚入手,所以想先从中文菜单入手,所以需要安装中文语言包: microsoft的中文语言包下载地址为:http ...
- 在web.xml中配置spring配置文件的路径
<context-param> <param-name>contextConfigLocation</param-name> <param-v ...
- Tiny210用户手册笔记
核心板 CPU 处理器: Samsung S5PV210,基于 CortexTM-A8,运行主频 1GHz 内置 P ...
- 条款5.了解c++默默编写并且调用了哪些函数。
如果想在一个内含reference成员的class内支持赋值操作,必须自己定义copy assignment操作符.而且面对“内含有const成员的”class,编译器的反应也是相同的,由于更改con ...
- SpringCloud教程 | 第十三篇: 断路器聚合监控(Hystrix Turbine)
版权声明:本文为博主原创文章,欢迎转载,转载请注明作者.原文超链接 ,博主地址:http://blog.csdn.net/forezp. http://blog.csdn.net/forezp/art ...
- New Concept English three (29)
1听力和打字训练: 31w/m 54 typing errors Whether we find a joke funny or not largely depends on were we have ...
- Java进阶知识点7:不要只会写synchronized - JDK十大并发编程组件总结
一.背景 提到Java中的并发编程,首先想到的便是使用synchronized代码块,保证代码块在并发环境下有序执行,从而避免冲突.如果涉及多线程间通信,可以再在synchronized代码块中使用w ...
- 剑指offer-第六章面试中的各项能力(圆圈中剩下的最后数字)
import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util ...