`

MFC类说明

    博客分类:
  • C++
阅读更多
①CObject类:CObject是MFC的根类,绝大多数MFC类是其派生的,CObject 实现了一些重要的特性,包括动态类信息、动态创建、对象序列化、对程序调试的支持,等等。CObject定义了一个CRuntimeClass类型的静态成员变量:CRuntimeClass classCObject,还定义了几组函数:构造函数析构函数类,诊断函数,与运行时类信息相关的函数,与串行化相关的函数。其中,一个静态函数:_GetBaseClass;五个虚拟函数:析构函数、GetRuntimeClass、Serialize、AssertValid、Dump。这些虚拟函数,在CObject的派生类中应该有更具体的实现。必要的话,派生类实现它们时可能要求先调用基类的实现,例如Serialize和Dump就要求这样。 静态成员变量 classCObject和相关函数实现了对CObjet特性的支持。

②CCmdTarget类:是MFC类库中消息映射体系的一个基类。消息映射把命令或消息引导给用户为之编写的响应函数(命令是由菜单项、命令按钮或者加速键产生的消息)。从CCmdTarget继承来的按键框架类包括:CView、CWinApp、CDocument、CWnd和CFrameWnd。很少需要直接从CCmdTarget派生类。

③CCmdThread类和CWinApp类:CWinThread对象代表在一个应用程序内运行的线程。运行的主线程通常由CWinApp的派生类提供;CWinApp由CWinThread派生。另外,CWinThread对象允许一给定的应用程序拥有多个线程。CWinThread支持两种线程类型:工作者线程和用户界面线程。工作者线程没有收发消息的功能:例如,在电子表格应用程序中进行后台计算的线程。用户界面线程具有收发消息的功能,并处理从系统收到的消息。CWinApp及其派生类是用户界面线程的例子。其它用户界面线程也可由CWinThread直接派生。CWinThread类的对象存在于线程的生存期。如果你希望改变这个特性,将m_bAutoDelete设为FALSE。要使你的代码和MFC是完全线程安全的,CWinThread类是完全必要的。框架使用的用来维护与线程相关的信息的线程局部数据由CWinThread对象管理。由于依赖CWinThread来处理线程局部数据,任何使用MFC的线程必须由MFC创建。

CWinThread::m_pMainWnd:保存指向应用程序的主窗口指针。

CWinThread::GetMainWnd:查询指向线程主窗口的指针。

CWinThread::InitInstance:重载以实现线程实例的初始化。

AfxGetApp:获得指向CWinApp对象的指针。

AfxGetInstanceHandle:获得当前应用程序实例的句柄。

AfxGetResourceHandle:获得应用程序资源的句柄。

AfxGetAppName:获得一个字符串指针,其中包含了应用程序的名字。另外,如果你拥有一个指向CWinApp对象的指针,可以通过m_pszExename来获得应用程序的名字。

④CDocTemplate类:它定义了文档模板的基本函数功能。通常通过应用的InitInstance函数来实现创建一或多个文档模板。文档模板定义了三个类之间的关系。CDocTemplate是抽象类,不能直接使用,通常应用使用Microsoft基础类库提供的两种CDocTemplate派生类之一:CSingleDocTemplate用于SDI,CMultiDocTemplate用于MDI。

⑤CDocument类:为用户定义的文档类提供了基本的函数功能。文档类表示了通常用于File Open命令打开和使用File Save命令保存的数据。CDocument支持标准操作,如创建、装载、保存等。框架用CDocument定义的界面来操作文档。应用可支持多种文档,例如文本文档和工作表。每种类型都有一个相关的文档模板。文档模板指定该类文档所使用的资源(如菜单、图标和加速符号表)。每个文档还含有一个CDocTemplate对象指针。用户通过与文档相联系的CView对象来与之交互。视图在框架窗口内生成一个文档图象,并解释作用于该文档之上的用户输入。一份文档可以有多个相关的视图,当用户在文档上打开一个窗口时,框架创建一个视图并将其与文档连接。文档模板为每类文档指定了用于显示的视图类型和框架窗口。文档作为窗口标准命令例程的一部分,接收标准用户界面组件的命令。文档在活动视图之后接收命令。如果文档未能处理指定的命令,则将其交给管理它的文档模板。当文档数据被修改时,各个视图都必须反应这些修改。CDocument提供了UpdateAllViews成员函数为视图通知这些变化。框架在关闭之前会提示用户必须存储修改后的文件。在一个典型的应用中生成一个文档,必须做到以下几点:

a)为每种类型的文档从CDocument中派生一个类。

b)添加保存在文档数据的成员变量。

c)为阅读和修改文档数据提供成员函数,文档的视图是这些成员函数最重要的用户。

d)在文档类中覆盖CObject::Serialize成员函数,从磁盘读取文档数据或将其写入磁盘。CDocument还支持通过邮件发送文档,如果存在邮件支持(MAPI)的话。

e)CDocument::IsModified:标识文档从最近一次保存以来是否被修改过[实时更新]。

f)CDocument::UpdateAllViews:通知所有视图文档已被修改的消息[在需要时候调用]。

⑥CWnd类:CWnd类提供了微软基础类库中所有窗口类的基本功能。CWnd对象与Windows的窗口不同,但是两者有紧密联系。CWnd对象是由CWnd的构造函数和析构函数创建或销毁的。另一方面,Windows的窗口是Windows的一种内部数据结构,它是由CWnd的Create成员函数创建的,而由CWnd的虚拟析构函数销毁。DestroyWindow函数销毁Windows的窗口,但是不销毁对象。CWnd类和消息映射机制隐藏了WndProc函数。接收到的Windows通知消息通过消息映射被自动发送到适当的CWnd OnMessage成员函数。你可以在派生类中重载OnMessage成员函数以处理成员的特定消息。CWnd类同时还使你能够为应用程序创建Windows的子窗口。先从CWnd继承一个类,然后在派生类中加入成员变量以保存与你的应用程序有关的数据。在派生类中实现消息处理成员函数和消息映射,以指定当消息被发送到窗口时应该如何动作。你可以经过两个步骤来创建一个子窗口。首先,调用构造函数CWnd以创建一个CWnd对象,然后调用Create成员函数以创建子窗口并将它连接到CWnd对象。当用户关闭你的子窗口时,应销毁CWnd对象,或者调用DestroyWindow成员函数以清除窗口并销毁它的数据结构。在微软基础类库中,从CWnd派生了许多其它类以提供特定的窗口类型。这些类中有许多,包括CFrameWnd,CMDIFrameWnd,CMDIChildWnd,CView和CDialog,被用来进一步派生。从CWnd派生的控件类,如CButton,可以被直接使用,也可以被进一步派生出其它类来。

CWnd::m_hWnd:指明与这个CWnd对象相关联的HWND句柄。

CWnd::Create:创建并初始化与CWnd对象相关联的子窗口。

CWnd::PreCreateWindow:在与CWnd对象相关联的窗口被创建之前调用。

CWnd::IsWindowEnabled:确定一个窗口是否允许鼠标和键盘输入。

CWnd::EnableWindow:允许或禁止鼠标和键盘输入。

CWnd::SetWindowPos:改变子窗口、弹出窗口和顶层窗口的大小、位置以及顺序。

CWnd::GetDlgItem:获得指定的对话框中具有指定ID的控件。

CWnd::UpdateData:初始化对话框或获得对话框中的数据。

CWnd::GetWindowRect:获得CWnd的屏幕坐标。

CWnd::GetDC:获得客户区的设备环境。

CWnd::RedrawWindow:更新客户区中的指定矩形或区域。

CWnd::UpdateWindow:更新客户区。

CWnd::Invalidate:使整个客户区无效。

CWnd::ShowWindow:显示或隐藏窗口。

CWnd::ClientToScreen:将给定点或显示器上矩形的客户区坐标转换为屏幕坐标。

CWnd::ScreenToClient:将给定点或显示器上矩形的屏幕坐标转换为客户坐标。

CWnd::SetWindowText:将窗口的文本或标题文字(如果有)设为指定的文本。

CWnd::SetFont:设置当前字体。

CWnd::GetDlgItemInt:将给定对话框中控件的文本转换为整数。

CWnd::SetTimer:安装一个系统定时器,当它被激活时,发送一个WM_TIMER消息。

CWnd::KillTimer:销毁一个系统定时器。

CWnd::FlashWindow:使窗口闪烁一次。

CWnd::MessageBox:创建并显示一个窗口,其中包含了应用程序提供的消息和标题。

……………一大堆消息响应函数略去。

⑦CView类:为用户定义的视图类提供了基本的功能。视图被连接到文档上,用作文档和用户之间的媒介:视图在屏幕或打印机上显示文档的图像,并将用户的输入解释为对文档的操作。视图是框架窗口的子窗口。可能会有多个视图共用一个框架窗口,就像在分隔窗口中那样。视图类、框架窗口类和文档类之间的联系通过CDocTemplate类来建立。当用户打开一个新窗口或将现有窗口分隔为多个时,框架会创建一个新视图并将它连接到文档对象上。一个视图只能被连接到一个文档,但是一个文档可以有多个视图与之相连接,例如,在分隔窗口或多文档界面(MDI)应用程序的多重子窗口中显示的文档就是如此。对于给定的文档类型,应用程序可以支持不同类型的视图;例如,一个字处理程序可能既要提供文档的完整文本视图,又要提供只显示每节标题的大纲视图。这些不同的视图类型可以放在不同的框架窗口中,如果你使用的是分隔窗口,你也可以把它们放在同一框架窗口的不同板块中。视图可以响应几种类型的输入,例如键盘输入,鼠标输入或拖放输入,还有菜单、工具条和滚动条产生的命令输入。视图接收框架窗口发送给它的命令,如果视图不接受一个给定的命令,它就将这个命令发送给相连接的文档。与所有的命令目标一样,视图类通过消息映射处理消息。当文档的数据发生变化时,视图类响应这种变化,通常调用文档的CDocument::UpdateAllViews函数,通知所有其它的视图调用OnUpdate函数。OnUpdate函数的缺省实现使视图的整个用户区域无效。你可以重载这个函数,只使视图中与文档的变化部分相对应的区域无效。如果要使用CView,应当从它派生一个类,并实现它的OnDraw函数以在屏幕上显示。你还可以利用OnDraw函数来进行打印和打印预览。框架将处理打印循环以实现对文档的打印和打印预览。通过CWnd::OnHScroll和CWnd::OnVScroll成员函数来处理滚动条消息。你可以在这些函数中实现对滚动消息的处理,你也可以利用CView的派生类SCrollView来处理滚动。除了CScrollView以外,微软基础类库还提供了其它的CView派生类:

CCtrlView,允许你在树,列表和带格式编辑控件中使用文档/视图结构。

CDaoRecordView,在对话框控件中显示数据库记录的视图。

CEditView,提供了一个简单的多行文本编辑器的视图。你可以将CEditView用作对话框中的一个控件,也可以将它用作文档的视图。

CFormView,一种可以滚动的视图,其中包含了对话框控件,它建立在对话框模板资源的基础上。

CListView,使你能够在列表控件中使用文档/视结构的视图。

CRecordView,在对话框控件中显示数据库记录的视图。

CRichEditView,使你能够在带格式编辑控件中使用文档/视图结构的视图。

CScrollView,自动提供滚动支持的一种视图。

CTreeView,使你能够在树控件中使用文档/视图结构的视图。

CView类还有一种派生类,名为CPreviewView,它被框架用于实现打印预览。这个类提供了对打印预览窗口特性的支持,例如工具条、单页或双页预览以及放大(被用来放大预览的图像)等。你没有必要调用或重载CPreviewView的任何成员函数,除非你想实现自己的打印预览界面(例如,如果你希望支持在预览模式下的编辑)。

CView::OnDraw:调用这个函数画出文档的图像,用于屏幕显示,打印或打印预览。需要提供其实现。

CView::OnUpdate:调用这个函数以通知一个视图,文档已经被修改。

CAnimateCtrl、Cbutton(->CbitmapButton)、CCombobox、CDateTimeCtrl、CEdit、CListBox、CIPAddressCtrl、CHotKeyCtrl、CListCtrl、CMonthCalCtrl、CRichEditCtrl、CScrollBar、CSliderCtrl、CSpinButtonCtrl、CStatic、CStatusBarCtrl、CToolBarCtrl、CtreeCtrl这些常用的Control控件类都是从CWnd继承下来的。
分享到:
评论

相关推荐

    Visual C++MFC类库参考手册

    在MFC中,类库主要分为几大类别,包括窗口类、文档/视图架构、控件类、对话框类、文件I/O类、GDI图形设备接口类等。这些类提供了丰富的功能,涵盖了应用程序生命周期管理、用户界面交互、数据存储与交换等多个方面。...

    MFC类的继承一览表

    标题“MFC类的继承一览表”指的是MFC库中的各个类之间的继承关系结构图。在MFC中,许多类都是从基类继承而来的,这些基类通常定义了一些通用的行为和属性,而派生类则可以添加或定制特定的功能。这样的设计遵循了...

    中文版 MFC 帮助文档,MFC 类库说明

    “MFC 参考”通常不说明继承的成 员函数或继承的运算符。 有关这些函数的信息,请参见层次结构关系图中描述的基类。 有关每个类的文档包括类概述、成员摘要(按类别)以及有关成员函数、重载运算符和数 据成员的...

    MFC 类结构关系图

    为了更好地理解MFC类结构关系,可以通过一个简单的例子来说明如何使用这些类: 假设我们需要创建一个包含按钮的对话框,并且当点击按钮时,会弹出一个消息框显示“Hello World”。这涉及到以下类的使用: - 使用`...

    MFC实现的Excel解析类

    本篇主要介绍一个基于MFC实现的Excel解析类,该类能够高效地读取和写入Excel数据。 标题中的"MFC实现的Excel解析类"指的是利用MFC框架开发的一个专门处理Excel文件的类。这个类可能包含了对Excel文件的操作,如打开...

    VC++之MFC类库中文手册_目录保护_vc++之mfc_mfc类_VC++之MFC类库中文手册_MFC类库_

    · MFC类 详细解说MFC库中的每个类和头文件信息。 · MFC宏和全局 详细解说MFC库中的每个宏、全局函数、全局变量。 · 结构、风格、回调函数和消息映射 详细解说MFC库中的各个结构、风格、回调函数和消息映射。

    VC++之MFC类库中文手册(一怀去意).zip_KHQ_MFC_MFC类中文_vc++_vc++之mfc

    1. **基础类**:如CObject,它是所有MFC类的基类,提供了对象的序列化、动态类型查询等功能。CString类则提供了一种方便的字符串操作方式。 2. **文档/视图架构**:这是MFC的核心设计模式,用于分离数据(文档类,...

    MFC类继承结构图(version 4.2, 6.0, 7.0)

    MFC类继承结构图是理解MFC框架的关键,它展示了MFC中的类是如何相互关联和继承的。 在标题提到的"MFC类继承结构图(version 4.2, 6.0, 7.0)"中,我们可以看到不同版本的MFC类库发展演变的过程。这三个版本代表了...

    MFC Excel类封装成库DLL(在静态库中使用 MFC)

    在这个项目中,开发者可能已经创建了一个基于MFC的类,该类继承自MFC的某个基础类,并封装了Excel的相关操作,如打开工作簿、读写单元格、执行公式等。 接下来,将这些功能封装到DLL中,需要遵循以下步骤: 1. ...

    MFC派生控件类报错未知重写说明符.rar

    error C3646: “m_ctrlList”: 未知重写说明符 error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int error C3646: “m_ctrlList”: 未知重写说明符 error C4430: 缺少类型说明符 - 假定为 int。...

    mfc的CImage类详细说明

    ### MFC的CImage类详解 #### 引言 在MFC框架中,`CImage`类的出现极大地丰富了图像处理的能力,弥补了`CBitmap`类在处理外部图像文件上的不足。`CImage`不仅能够加载和显示JPEG、GIF、BMP和PNG等多种格式的图像,...

    一个好用的串口类(mfc)

    本串口类是针对MFC设计的,能够帮助开发者方便地实现串口通信功能。下面我们将详细探讨串口通信的基本概念、MFC中的串口类以及如何使用这两个文件`Serial.cpp`和`Serial.h`。 1. **串口通信基础** 串行通信是指数据...

    mfc官方文档

    通过MFC类,开发者可以轻松地创建窗口、处理消息、实现用户界面元素,如菜单、工具栏和状态栏,以及进行文件操作、内存管理和异常处理。MFC提供了一套完整的消息映射机制,使得消息处理程序的定义和调用变得简单。 ...

    MFC类库详解 中文说明文档

    中文版 MFC类库每个类的说明文档包括:该类的概括、类成员的种类、以及该成员函数、重载操作符或数据成员的基本用途。

    VC9.0 MFC说明

    1. **基础类(Base Classes)**:如CObject,它是所有MFC类的基类,提供了对象序列化、调试和比较等基本功能。 2. **文档/视图架构(Document/View Architecture)**:这是MFC的核心设计模式,用于实现数据模型和...

    MFC类库详解 MFC类库详解.chm

    MFC类库详解.chm文件是一个帮助文档,通常用于提供MFC类库的详细说明和教程。CHM是Microsoft的 Compiled HTML Help 文件格式,这种文件集成了HTML文档和索引,方便用户查找和学习MFC的相关知识。 在MFC中,主要包含...

    MFC的数组类CArray使用详解-赞

    MFC中的数组类CArray使用详解 MFC中的数组类CArray是MFC框架中的一种常用的数据结构,用于存储和管理数组。CArray类似于常规数组,可以存放任何数据类型。不同的是,CArray可以根据需要动态地增大或减小,而不是...

    MFC主要函数和类大全.zip

    MFC主要包含了窗口、控件、消息处理、数据库访问、网络通信等多个方面的类,极大地简化了Windows应用的开发流程。 标题中的"MFC主要函数和类大全"指的是一个集合了MFC关键函数和类的资源,可能是以CHM( Compiled ...

Global site tag (gtag.js) - Google Analytics