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 ...
随机推荐
- MySQL5.7版本开启二进制日志是log_bin、bin-log 还是 bin_log ?
已Mac系统为例,文件:/usr/local/mysql/support-files/my-default.cnf 是mysql的默认配置文件,你可以直接修改这个文件但是不推荐,你可以在/etc/my ...
- Solr快速入门
1. 什么是Solr Solr是基于lucene的全文检索服务器.不同于lucene工具包,solr是一个web应用,运行在servlet容器,屏蔽了底层细节,并对外提供服务. 点我lucene快速入 ...
- spring定时器的定义
1.0/5 * * * * ?表示多长时间: 每 5 秒执行一次 七个域从左到右依次是,秒,分,时,日,月,周几,年....最后一个可选.同样是七个域与当前时间匹配的时候则执行... n/m 表示从n ...
- [置顶]
Android App引导页这些坑你自己犯过吗?
场景:测试机:华为荣耀6x 今天我自己掉入一个很蠢蠢的坑,一个引导页搞了20多分钟,不管我怎么测试用真机还是模拟器都无法运行,但是我写的demo完全没问题,好无语,我都怀疑我是不是搞android,我 ...
- opencv 边界确定函数
多边形逼近,用嘴贴切的多边形标识 void approxPolyDP(InputArray curve, OutputArray approxCurve, double epsilon, bool c ...
- PenMount Touch显示鼠标指针驱动安装
/******************************************************************************* * PenMount Touch显示鼠 ...
- eclipse javaw.exe in your current path问题
问题: 第一次运行eclipse的时候,可能会提醒找不到javaw.exe ******等的问题 很坑的! 解决方案: 无法启动Eclipe,因找不到javaw.exe 还是环境变量的问题!!! 注意 ...
- 【MFC】MFC DLEdit 设计属于自己的编辑框_鼠标悬停
MFC DLEdit 设计属于自己的编辑框 2012-02-04 13:00 by 捣乱小子, 3543 阅读, 5 评论, 收藏, 编辑 起因 无意间看到了大牛们写的自定义编辑框控件,于是找了个时间 ...
- UITextField的使用总结
初始化一个文字框: UITextField * textField = [[UITextField alloc]initWithFrame:CGRectMake(, , , )]; 设置和获取文字框文 ...
- TortoiseGit不同分支合并代码
现在有主分支master和分支day2.现在要把day2上的变更合并到主分支master上! 1.首先切换到目标分支master上. 说明当前分支是master分支. 2.在master分支上查看提交 ...