zoukankan      html  css  js  c++  java
  • MFC编程基础

    MFC编程基础

    一、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)

    clip_image002

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

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

    clip_image004

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

    clip_image006

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

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

    clip_image008

  • 相关阅读:
    UVA 10617 Again Palindrome
    UVA 10154 Weights and Measures
    UVA 10201 Adventures in Moving Part IV
    UVA 10313 Pay the Price
    UVA 10271 Chopsticks
    Restore DB後設置指引 for maximo
    每行SQL語句加go換行
    种服务器角色所拥有的权限
    Framework X support IPV6?
    模擬DeadLock
  • 原文地址:https://www.cnblogs.com/lzmfywz/p/2399403.html
Copyright © 2011-2022 走看看