今天向同学请教了下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. 图示:DOM元素各种位置属性

  2. python学习笔记(接口自动化框架 V1.0)

    之前是利用python自带的unittest测试框架 这次自己设计一个 之后再一点点往里面加功能 (ps:当然这个框架真的是很简单..很简单...很简单...) excel文件格式: #!/usr/b ...

  3. Appium移动自动化测试(三)--自动化测试demo

    使用java语言编写并实现自动化测试实例 前面我已经搭建好了appium所需要的环境,本文我以系统自带的计算器app为测试对象,进行学习. 一.将测试机与PC连接 本人使用的是Android模拟器,测 ...

  4. python中zip()函数的用法

    一. 定义 zip()函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少内存 如果各个迭代器的元素个数不一致,则返回列表长度与最 ...

  5. 前端工程师(JavaScript)在业余时间如何提高自身能力

    1.前端工程师(JavaScript)在业余时间如何提高自身能力? https://www.zhihu.com/question/40186398?sort=created 2.前端开发工程师必读书籍 ...

  6. 使用ZooKeeper实现Java跨JVM的分布式锁(读写锁)

    一.使用ZooKeeper实现Java跨JVM的分布式锁 二.使用ZooKeeper实现Java跨JVM的分布式锁(优化构思) 三.使用ZooKeeper实现Java跨JVM的分布式锁(读写锁) 读写 ...

  7. Codeforces Round #394 (Div. 2) A. Dasha and Stairs

    A. Dasha and Stairs time limit per test:2 seconds memory limit per test:256 megabytes input:standard ...

  8. MySQL学习笔记2018-02-07更新

    前言:本人wechat:YWNlODAyMzU5MTEzMTQ=. 如果内容有错,请指出来. win10下安装 https://dev.mysql.com/downloads/mysql/下载并解压m ...

  9. Java中会有内存泄露吗?

    一.Java内存回收机制 不论哪种语言的内存分配方式,都需要返回所分配内存的真实地址,也就是返回一个指针到内存块的首地址.Java中对象是采用new或者反射的方法创建的, 这些对象的创建都是在堆(He ...

  10. linux时间管理 之 jiffies

    1.jiffies 又称时钟滴答,是一个全局变量,它的值在系统引导的时候初始化为0,在时钟中断初始化完成后,每次时钟中断发生,在时钟中断处理例程中都会将jiffies的值 +1. jiffies_64 ...