今天向同学请教了下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入门经典的更多相关文章

  1. 强烈推荐visual c++ 2012入门经典适合初学者入门

    强烈推荐visual c++ 2012入门经典适合初学者入门 此书循序渐进,用其独特.易于理解的教程风格来介绍各个主题,无论是编程新手,还是经验丰富的编程人员,都很容易理解. 此书的目录基本覆盖了Wi ...

  2. c++学习书籍推荐《Visual C++2008入门经典》下载

    百度云及其他网盘下载地址:点我 <Visual C++2008入门经典>学习目标: 使用标准模板库(STL)来组织和操作本地C++程序中的数据 C++程序调试技术 构造Microsoft ...

  3. <Node入门经典>读书笔记

    最近在读<Node入门经典>, 之前没有做笔记, 今天开始把看过自己又写了的代码放这里以免忘记. express var express = require('express') var ...

  4. 正经学C#_介绍与其编写基础:《c#入门经典》

    本文所讲内容,均可在<c#入门经典>中可以查询.如有错误,敬请指出.谢谢! C#:全称C Shar.是微软.Net Framework平台下最为主要的客户语言之一.个人理解,c#是微软最为 ...

  5. SQL入门经典(十) 之事务

    事务是什么?事务关键在与其原子性.原子性概念是指可以把一些事情当作一个执行单元来看待.从数据库角度看待.他是指应该全部执行或者全部不执行一条或多条语句的最小组合.当处理数据时候经常确保一件事发生另一件 ...

  6. 《Web编程入门经典》

    在我还不知道网页的基础结构的时候,我找过很多本介绍Web基础的书籍,其中这本<Web编程入门经典>,我认为是最好的. 这本书内容很全面.逻辑很严谨.结构很清晰.语言文字浅显易懂. 看这本书 ...

  7. (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO

    http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...

  8. 《c#入门经典第五版》简介及pdf电子书网盘下载地址(收藏)

    <C#入门经典(第5版)>全面讲解C# 2010和.net架构编程知识,为您编写卓越C# 2010程序奠定坚实基础.C#入门经典系列是屡获殊荣的C#名著和超级畅销书.最新版的<C#入 ...

  9. [刷题]算法竞赛入门经典 3-12/UVa11809

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa11809:Floating-Point Numbers 代码: //UVa11 ...

随机推荐

  1. 智课雅思词汇---二十五、-ate

    智课雅思词汇---二十五.-ate 一.总结 一句话总结:又是动词,又是名词,又是形容词 后缀:-ate ①[动词后缀] 表示做.造成.使之成....做...事等意义 hyphenate 加连字符 o ...

  2. ubuntu16.04 安装OpenNI并运行kinnectfusion

    由于OpenNI是ubuntu12.04以前使用的驱动kinnect的库,现在用起来有很多的不便,用心的系统运行旧的设备,有诸多问题.现总结流程如下: 环境:Ubuntu16.04 64bit Kin ...

  3. msbuild编译

    @echo offcd /d %~dp0 if exist output.log del /q /f output.logif exist success.txt del /q /f success. ...

  4. requests beautifulsoup

    requests Python标准库中提供了:urllib.urllib2.httplib等模块以供Http请求,但是,它的 API 太渣了.它是为另一个时代.另一个互联网所创建的.它需要巨量的工作, ...

  5. h5使用模块模板,循环输出模块列表

    博主使用freemarker为框架,不过不影响功能的说明,首先来看看成品效果图 然后是html [#import "/common/layout.ftl" as layout] [ ...

  6. 嵌入式中 ARM的几种工作模式 以及异常模式的优先级

    一.Arm工作模式: Arm微处理器支持7种工作模式,分别为: 1. 用户模式(Usr)            用于正常执行程序 2. 快速中断模式(FIQ)    用于高速数据传输 3. 外部中断模 ...

  7. 敏捷开发之scrum模型

    什么是敏捷开发? 敏捷开发(Agile Development)是一种以人为核心.迭代.循序渐进的开发方法. 怎么理解呢?首先,我们要理解它不是一门技术,它是一种开发方法,也就是一种软件开发的流程,它 ...

  8. cursor光标类型

    今天早上在网上看到一篇关于光标类型的总结代码,很好,特定拿来: 最终结果: 代码: <!DOCTYPE html> <html lang="zh-cn"> ...

  9. golang日期转字符串,仿照C#中的日期格式结构体

    1.日期格式集合.日期转字符串方法 package util import ( "strings" "time" ) //日期格式:模仿java中的结构体 ty ...

  10. vc++6 Platform SDK February 2003

    vc++6.0 sp6 ftp://ejiasoft:softejia@ejia2.tust.edu.cn/else/VC++.6.0.with.SP6.ISO MSDN http://ftp.sds ...