http://www.cnblogs.com/lzmfywz/archive/2012/03/15/2399403.html

一、MFC类库概述

MFC(Microsoft Foundation class)微软基本类(库),有时候也有人叫做微软基本类库,因为它确实是一个类库(物理上讲),而且非常庞大;它也是一个面向对象的应用程序架构(逻辑上),程序员利用它可以很方便搭建应用程序框架。MFC结合了面向对象的编程技术和WINDOWS消息驱动的编程技术,并封装了WIN32API,其设计好处:消除了WIN32API的复杂性,封装了WIN32API,统一了程序的概念,而且可扩展。MFC由AFX项目小组进化而来,还有一些AFX代码,如AfxMessageBox,AFxGetApp等。编写MFC类库的主要目的是为了软件的复用。

查阅MSDN,简单介绍CString类。

三、MFC基础类简介

MFC框架图(太大,略,见MSDN)

1. 根类:CObject

是大多数MFC中大多数类和用户自定义类的根类,为程序员提供了进入所编写程序的许多公用操作如:对象的建立和删除,序列化支持,对象的诊断输出等。

2. 应用程序结构类:

命令发送类(CCmdTarget):该类是CObject类的子类,是MFC中具有消息映射属性类的基类。当对象接收到消息以后,消息映射调用相关联的函数对消息进行处理。从他派生的类有:窗口类(CWnd)、应用程序类(CWinApp)、文档类(CDoc)、视图类(CView)以及框架窗口类(CFrameWnd)。

窗口应用程序类(CWinApp):每个应用程序只有一个应用程序对象,在运行程序中该对象和其他对象相互协调。

文档/视图类:文档对象由文档模板创建,管理应用程序的数据。视窗对象表示一个窗口的客户区,显示文档数据并允许用户与之交互。

文档模板类(CDocTemplate):文档模板协调文档、视图和框架窗口的创建。

线程支持类(CWinThread):所有线程的基类,可直接使用。应用程序类(CWinApp)就是由他派生来的。

3. 可视对象类

窗口类(CWnd):提供了MFC所有窗口类的基本功能。创建窗口要分两部分进行:首先引入构造函数,构造一个CWnd对象;调用Create函数建立Windows窗口并将它连接到CWnd对象上。由他派生的子类有:框架窗口类:SDI应用程序主框架的基类、多文档框架窗口类(CMDIFrameWnd):MDI应用程序主框架的基类、多文档子对象类(CMDIChildWnd):MDI应用程序框架的基类。

视图类(CView):管理框架窗口客户区和显示文档数据并接收输入的客户区。由他派生的子类有:CScrollView类:具有滚动功能的视图类、 CFormView类 :在对话资源中定义的滚动视图类、CEditView 类:具有文本编辑,查找,替换和滚动功能的视图类、CListView类:包含Windows列表控件的视图类、 CTreeView类:包含树形察看控件的视图类。

菜单类(CMenu):Cobject的子类,用于管理菜单。

对话框类(CDialog):因为对话框是一个特殊的窗口,所以该类是从CWnd的派生类。由他派生出来的子类有:CFileDialog类:提供打开或保存一个文件所使用的对话框;CColorDialog 类:提供选择颜色的标准对话框;CFontDialog类:同样,它是用来提供选择一种字体的标准对话框;CPrintDialog 类:提供打印一个文件的标准对话框;CFindReplaceDialog类:提供查找或替换的标准对话框;

4. 控件类

包括如下类,使用这些类可建立静态文本、命令按钮、位图按钮、列表框等。

CStatic类:静态文本空间窗口,用于标注、分隔对话框和窗口中的其他控件;

CButton类:按钮空间窗口,为对话框或窗口中的按钮、检查框或者单选框提供接口;

CEdit类:文本编辑对话窗口,用于接受用户的文本输入;

CScrollBar类:滚动条控件窗口,提供控制条的功能,用于对话框或窗口中的一个控件,通过它实现在一定范围内定位;

CRichEditCtrl类:多信息编辑控件;

CProgressCtrl类:进程指示控件窗口;

CCombBox类:组合框,由一个文本编辑控件和一个列表框组成;

CBitmapButton类:带有位图而非文字标题的按钮;

CSpinButtonCtrl类:带有双箭头按钮,点击某个箭头用于增大或减小某个值;

CAnimateCtrl类:动画显示,用于显示简单的video图像;

CToolTip类:一个小的弹出式窗口,用于提示应用程序中某个工具的作用;

CHotKeyCtrl类:使用户创建一热键,迅速地执行某项操作;

CTreeCtrl类:树形察看控件;

CListCtrl类:管理由图标和标签组成的列表项;

CHeaderCtrl类:显示列标题或标签。

5. 控件条类

指的是连接在主窗口框架顶部或底部的小窗口。他有以下相关的派生类:

CStatusBar类:状态条控件窗口的基类;

CToolBar类:包含非基于HWND的位图式命令按钮的工具条控件窗口;

CDialogBar类:控制条形式的非模式对话框。

6. 绘图工具类CDdiObject

包括一下派生类:

CBitmap类:封装一个GDI位图,提供操作位图的接口;

CBrush类:封装一个GDI画刷,可被选择为设备描述表的当前画刷;

CFont类:封装一个GDI字体,可被设备描述表的当前字体;

CPalate类:封装一个GDI调色板,可被设备描述表的当前调色表;

CPen类:封装一个GDI画笔,可被设备描述表的当前画笔;

7. 设备情景对象类CDC

是Cobject类的子类,和它的派生类支持设备情景对象。它的子类有:

CPaintDC类:设备情景对象类;

CClientDC类:窗口客户区设备情景对象类,如响应鼠标点击进行绘图等;

CWindowsDC类:整个窗口的设备情景对象类;

CMetaFileDC类:元文件设备情景对象类。

8. 数据类型类

CString类:字符串类;

CTime类:存放绝对日期时间类;

COleDateTime类:封装OLE自动化中使用的DATE数据类型,包含日期和时间;

CPoint类:存放坐标(x,y);

CSize类:存放距离或者相对位置;

CRect类:存放矩形区域的坐标,类似与windows的RECT;

9. 通用类

文件输入/输出类:CFile类和CArchive类

CFile类:提供访问磁盘二进制文件的接口;

CMemFile类:提供访问内存文件的接口;

CStudioFile类:提供访问缓存磁盘文件的接口;

CArchive类:与CFile类一起通过序列化实现对象的永久存储;

10. 模板集合类

CArray类:提供任意的类型数组的模板类;

CList类:任意类型的列表模板类;

CMap类:映射任意关系类型的模板类;

CTypedPtrList类:负责将对象指针存入列表中;

CTypedPtrArray类:负责将对象指针存入数组中;

11. 异常类

是所有异常子类的基类。派生类有:

CArchiveException类:表示文档序列化异常;

CFileException类:有关文件的异常;

CMemException类:内存不足产生的异常;

CNotSupportedException类:使用不支持特性产生的异常;

CUseException类:停止用户初始化操作的异常;

COleException类:表示于OLE有关的异常;

12. 调试支持类

CDumpContext类:提供诊断转储(diagnostic dump)目标;

CMemoryState类:表示内存的使用状态。

13. ODBC数据库类

包括以下子类:

CDatabase类:封装与数据源的链接,通过此链接应用程序可以在数据源上进行操作;

CRecordSet类:封装一组从数据源选出的记录集;

CRecordView类:提供直接链接记录集对象的格式视图;

14. OLE

九个类组成层次结构分为三类

a、 OLE容器类

COleDocument类:用于实现复合文档,是容器文档的基类;

COleItem类:文档项的基类;

COleException类:表示与OLE操作有关的异常情况;

COleClientDoc类和COleClientItem类为支持OLE的客户类。

b、 OLE服务器类

COleServerDoc类:服务器应用程序文档类基类;

COleServerItem类:表示与COleServerDoc类的接口;

COleTemplateServer类:创建由OLE可视编辑服务器、自动化服务器和链接容器使用的文档。

c、 ActiveX控件类

COleControlModule类:用于开发ActiveX控件模块对象,提供成员函数来初始化ActiveX控件模块;

COleControl类:用于开发ActiveX控件;

CConnectionPoint类:用于定义与其它ActiveX对象通信的接口类型。

MFC的这些类本质上都是对Win32对象的封装,很多Win32对象都有对应的MFC类与之对应。如:

Win32对象

MFC类

 

Win32对象

MFC类

HWND

CWnd

 

HBRUSH

CBrush

RECT

CRect

 

HPEN

CPen

POINT

CPoint

 

HFONT

CFont

SIZE

CSize

 

HBITMAP

CBitmap

         

可以使用FromHandle函数将一个Win32对象转换成MFC类对象。如:

static CWnd* PASCAL CWnd ::FromHandle( HWND hWnd );

static CDC* PASCAL CDC ::FromHandle( HDC hDC );

static CBrush* PASCAL CBrush::FromHandle( HBRUSH hBrush );

static CFont* PASCAL CFont::FromHandle(HFONT hFont);

Windows资源

凡是提供给Windows应用程序运行时,所使用到的东西统称为资源。包括加速键、位图、光标、对话框、图标、菜单、字符串等等。在VC编写相关Windows应用程序的时候在资源文件(Resource File)中都要对他们进行编辑,定义。

以下对四种比较常用的资源添加、使用举例说明:

1、 加速键资源:也叫快捷键。方便用户进行比较常见的应用程序操作。应用程序在进入消息循环之前调用LoadAccelerator(hInstance,(LPCTSTR)strTablename)加载加速键表(简单的进行翻译:某组合键在该应用程序中代表什么含义。)TranslateAccelerator(msg.hwnd, hAccelTable, &msg)

其中的ID代表某一个菜单的资源ID号,Key代表用户自定义的组合键:Ctrl+?,Alt+?等。

2、 字符串资源:应用程序所使用到的字符串标识符,如对话框标题,提示给用户的文本信息等等。使用方法:在字符串表(String Table)中定义相应的字符串资源,可以使用程序员需要的任何序言,在需要用到的时候使用LoadString加载他们既可。

3、 菜单资源:应用程序提供给用户主要功能的体现,也是应用程序窗口的重要组成部分。程序设计者可以根据需要进行订制。使用方法:使用VC界面Resouce File界面中Menu项,进行菜单编辑并添加菜单处理函数。

4、 图标资源:代表应用程序的位图,可以进行绘制,在窗口的注册函数中进行加载。

5、 对话框资源:特殊的窗口,放置控件等基本元素,方便用户和应用程序进行交互。使用方法:添加对话框,放置控件以及编写相关控件功能处理函数。

MFC编程基础的更多相关文章

  1. (转)Windows驱动编程基础教程

    版权声明     本书是免费电子书. 作者保留一切权利.但在保证本书完整性(包括版权声明.前言.正文内容.后记.以及作者的信息),并不增删.改变其中任何文字内容的前提下,欢迎任何读者 以任何形式(包括 ...

  2. 《VS2010/MFC编程入门教程》——读书笔记

    推荐两个比较好的学习网站:http://v.dxsbb.com/jisuanji/555/ http://www.jizhuomi.com/software/257.html MFC全称Microso ...

  3. VS2010/MFC编程入门之五十二(Ribbon界面开发:创建Ribbon样式的应用程序框架)

    上一节中鸡啄米讲了GDI对象之画刷CBrush,至此图形图像的入门知识就讲完了.从本节开始鸡啄米将为大家带来Ribbon界面开发的有关内容.本文先来说说如何创建Ribbon样式的应用程序框架. Rib ...

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

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

  5. VS2010/MFC编程入门之三十八(状态栏的使用详解)

    上一节中鸡啄米讲了工具栏的创建.停靠与使用,本节来讲解状态栏的知识. 状态栏简介 状态栏相信大家在很多窗口中都能见到,它总是用来显示各种状态.状态栏实际上也是一个窗口,一般分为几个窗格,每个窗格分别用 ...

  6. VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)

    上一节讲了标签控件Tab Control以后,常用控件的内容就全部讲完了,当然并没有包括所有控件,主要是一些很常用很重要的控件.本节开始鸡啄米将为大家讲解菜单的概念及使用. 菜单简介 菜单在界面设计中 ...

  7. VS2010/MFC编程入门之前言

    鸡啄米的C++编程入门系列给大家讲了C++的编程入门知识,大家对C++语言在语法和设计思想上应该有了一定的了解了.但是教程中讲的例子只是一个个简单的例程,并没有可视化窗口.鸡啄米在这套VS2010/M ...

  8. VS2010/MFC编程入门之四十四:定时器Timer

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

  9. 第二章 Matlab面向对象编程基础

    DeepLab是一款基于Matlab面向对象编程的深度学习工具箱,所以了解Matlab面向对象编程的特点是必要的.笔者在做Matlab面向对象编程的时候发现无论是互联网上还是书店里卖的各式Matlab ...

随机推荐

  1. 求树的重心(POJ1655)

    题意:给出一颗n(n<=2000)个结点的树,删除其中的一个结点,会形成一棵树,或者多棵树,定义删除任意一个结点的平衡度为最大的那棵树的结点个数,问删除哪个结点后,可以让平衡度最小,即求树的重心 ...

  2. 活动组件(五):一个activity的例子

    建立两个Activity,一个是NormalActivity,另一个是DialogActivity.首先建立这两个Activity的布局文件,如下图: 然后编写这连个Activity,如下: 接着对这 ...

  3. android_demo01

    /layout/activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/ ...

  4. C语言 类型

    int 2个字节或4个字节 根据平台而定, -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647 unsigned int 2或4个字节    0到655 ...

  5. sql set xact_abort on 用例

    set xact_abort on 设置事务回滚的当为ON时,如果你存储中的某个地方出了问题,整个事务中的语句都会回滚为OFF时,只回滚错误的地方 例子 : ALTER proc [dbo].[BuC ...

  6. 利用API 建立Dependent Value Set

    . 建立SET fnd_flex_val_api.create_valueset_independent(v_set_name ,v_description ,v_security ,v_enable ...

  7. 夺命雷公狗ThinkPHP项目之----企业网站20之网站前台头尾分离

    我们的网站直接让他头尾进行分离即可: 然后在代码里面找到id 为header的这段代码: 然后将整个div的内容都给弄出来,然后在view里面创建一个Public的目录,然后在创建一个header.h ...

  8. ralink网卡驱动的下载地址集合

    linuxMT7612U11/7/2014v3.0.0.1http://cdn-cw.mediatek.com/Downloads/linux/MT7612U_DPO_LinuxSTA_3.0.0.1 ...

  9. 安装交叉编译器arm-linux-gcc

    需要交叉编译环境故安装交叉编译环境    1.在宿主机的/usr/local/arm目录存放交叉编译器        mkdir /usr/local/arm    2.解压交叉编译器包至/usr/l ...

  10. php+jquery注册实例

    写了一个简单的PHP+jQuery注册模块,需要填写的栏目包括用户名.邮箱.密码.重复密码和验证码,其中每个栏目需要具备的功能和要求如下图: 在做这个模块的时候,很大程度上借鉴了网易注册( http: ...