MFC类说明

①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继承下来的。

你可能感兴趣的:(多线程,数据结构,框架,windows,mfc)