1.2 MFC简介

MFC是Microsoft提供的放置Windows API的面向对象的包装的C++类库。MFC大约封装了好几百个类,其中有一些可以直接调用,有些类可以作为用户自己的类的基类。一些MFC类比较简单,比如CPoint类代表一个二维数据点;一些类比较复杂,比如CWnd类,它封装了窗口的功能。在MFC程序中,我们并不经常直接用Windows API,而是从MFC类创建并调用其中的成员函数。

MFC也是一个应用程序的框架结构。不仅是类的集合,还帮助定义了应用程序的结构并为应用程序处理许多杂物。以CWinApp类为例,该类代表应用程序本身,MFC几乎封装了应用程序操作的所有方面;框架结构提供WinMain函数,而WinMain函数反过来调用应用程序对象的成员函数使程序运行下去;Run是WinMain调用CWinApp的成员函数,它提供一个消息循环,将消息送到应用程序的窗口。框架结构还提供抽象功能,例如文档/视图体系结构在API建造了功能强大的基础功能。

1.2.1 C++/MFC好处

使用面向对象思想进行开发有以下优点:
  1、易维护
    采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的。
  2、质量高
    在设计时,可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量。
  3、效率高
    软件开发时根据设计的需要对现实世界的事物进行抽象,产生类。使用这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。
  4、易扩展
    由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。

MFC能像C++一样吗?

  想给应用程序添加一个工具栏浮在窗口?没有问题,MFC提供了一个CToolBar类。

  需要一个链表或者可以调整尺寸的数组?很容易,CList和CArray以及其它MFC类提供封装的容器。

  开发ActiveX控件复杂吗?也很简单啊,COleControl和COlePropertyPage这些类简化了ActiveX的开发过程。

1.2.2 MFC设计思想

每当问道大神应该如何学习Java、如何学习C++、如何学习QT…,大神们总会这样跟你说:“重要的不是语言和工具,而是思想”。

MFC的设计思想及预期:

  1 MFC应该提供给Windows OS提供面向对象的接口

    通过编写类封装窗口、对话框及其它对象,引入虚函数来完成。

  2 MFC不能增加对应用程序内存造成不必要的开销

    MFC的设计人员今早就如何将窗口、菜单等包装作出选择。

1.2.3 文档/视图体系结构

MFC应用程序框架结构的基石是“文档/视图体系结构”。它定义了一种体系结构,该结构依靠文档对象保存应用程序的数据,并依靠视图对象控制视图中显示的数据。MFC在类CDocument和CView中为文档和视图提供基础结构。CWinApp、CFrameWnd和其它类与CDocument、CView合作,将所有片段连在了一起。

1.2.4 MFC类的分层结构

大多数MFC类都是从CObject中直接或者间接派生出来的,继承CObject的类具有3个重要特性:

  1 串行化支持

对象的永久数据流出或流入存储介质的进行

  2 运行时类信息支持

运行时类信息(RTCI)允许在运行时检索对象的类名称和其它信息

  3 诊断和调试支持

对CObject派生类的实例执行有效检查,并将状态信息转存到一个调试窗口

1.2.5 AFX函数

不是所有的MFC函数都是类成员函数。MFC以全局函数的形式提供了自己各类的API函数,名字以Afx开头。类成员函数只能在所属的对象说明体重被调用,而Afx函数则任何地方都可以调用。

MFC-01-Chapter01:Hello,MFC---1.2 MFC简介的更多相关文章

  1. MFC下调用控制台和控制台下MFC库的支持

    1.MFC下调用控制台 在CWinApp的InitInstance中对话框的DoModal之前加入 AllocConsole(); // 开辟控制台 SetConsoleTitle(_T(" ...

  2. VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)

    VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)-软件开发-鸡啄米 http://www.jizhuomi.com/software/141.html   上一讲中讲了VS20 ...

  3. 在共享DLL中使用MFC 和在静态库中使用MFC的区别

    使用VS2008,在项目属性中有一项MFC的使用,有三种设置: 1.使用标准Windows库 2.在共享DLL中使用MFC 3.在静态库中使用MFC          第一种顾名思义.        ...

  4. MFC学习笔记(一): 不用MFC向导如何新建一个MFC程序

    使用Visual Studio新建一个空项目,项目命名为HelloMFC,完成后,打开项目属性页面,将配置属性选项卡中的常规项打开,将其中的MFC的使用属性栏改为:在静态库中使用MFC或者在共享DLL ...

  5. VS2010/MFC编程入门之四十六(MFC常用类:MFC异常处理)

    上一节中鸡啄米讲了CFile文件操作类,本节主要来说说MFC异常处理. 在鸡啄米C++编程入门系列的最后一节鸡啄米:C++编程入门系列之五十(异常处理)中,鸡啄米讲了C++标准异常的处理机制,如果你还 ...

  6. MFC的使用——在共享DLL中使用MFC、在静态库中使用MFC(转)

    原文转自 https://blog.csdn.net/albertsh/article/details/52838419 1.使用标准Windows库 使用WINDOWS SDK API库,不使用MF ...

  7. mfc中Button、Edit Control和MFC EditBrowse Control的用法

    [前(fei)言(hua)] 写LL(1)分析器被CString转string卡了一个多小时也是醉了. 趁着还算清醒写下这次用到的控件的使用方法好了. 这次实验的mfc用到了四个控件:Edit Con ...

  8. VS2010/MFC编程入门之四十五(MFC常用类:CFile文件操作类)

    上一节中鸡啄米讲了定时器Timer的用法,本节介绍下文件操作类CFile类的使用. CFile类概述 如果你学过C语言,应该知道文件操作使用的是文件指针,通过文件指针实现对它指向的文件的各种操作.这些 ...

  9. VS2010/MFC编程入门之四十四(MFC常用类:定时器Timer)

    前面一节鸡啄米讲了CTime类和CTimeSpan类的使用,本节继续讲与时间有关的定时器.定时器并不是一个类,主要考虑到,提起时间的话就不能不说定时器,所以就把它放到CTime和CTimeSpan之后 ...

  10. VS2010/MFC编程入门之四十二(MFC常用类:CString类)

    上一节鸡啄米讲了分割窗口的有关知识,本节开始讲解MFC的一些常用类,先来说说CString类. CString类简介 CString类作为MFC的常用类,当之无愧.可以这样说,只要是从事MFC开发,基 ...

随机推荐

  1. Python 安装Twisted 提示python version 2.7 required,which was not found in the registry

    由于我安装Python64位的,下载后没注册,安装Twisted时老提示“python version 2.7 required,which was not found in the registry ...

  2. 手把手教你写Sublime中的Snippet

    手把手教你写Sublime中的Snippet Sublime Text号称最性感的编辑器, 并且越来越多人使用, 美观, 高效 关于如何使用Sublime text可以参考我的另一篇文章, 相信你会喜 ...

  3. md语法之行内代码和代码片

    md语法之行内代码和代码片 比如说要在行内写上一句或者半句代码(代码的意思就是某种脚本语言), 用撇号围起来就可以了. 比如: import pandas as pd 写代码片(单独的一块脚本语言)的 ...

  4. Control.DataBinding数据绑定简单用法:

    DataBindings的用法: 第一个值:要绑定到TextBox的什么地方 第二个值:数据源是什么 第三个值:应该取数据源的什么属性 第四个值:是否开启数据格式化 第五个值:在什么时候启用数据源绑定 ...

  5. Linux快捷键

    欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...

  6. linux 记录用户操作记录日志

    ####################################################################################historyUSER_IP=$ ...

  7. Spring MVC常用注解

    cp by http://www.cnblogs.com/leskang/p/5445698.html 1.@Controller 在SpringMVC 中,控制器Controller 负责处理由Di ...

  8. c语言迷宫游戏的实现

    // // main.c // 迷宫游戏代码实现 // #include <stdio.h> #define ROW 6 //宏定义行 #define COL 6 //宏定义列 /** * ...

  9. AJAX(一、基本知识)

    AJAX:Asynchronous ([ə'sɪŋkrənəs; eɪ-])Javascript (['dʒɑ:və,skrɪpt])and XML 异步的Javascript和XMLAJAX不是新的 ...

  10. 用Object字面量来代替swtich/if...else

    很多时候,if...else...有很多判断分支选项,就会见到: if (animal === 'dog') { // TO DO 'dog' } else if (animal === 'cat') ...