什么是MFC框架,有几种?

什么是MFC框架,有几种?,第1张

MFC框架是对windows api的一个封装,提高开发效率,就一种;

MFC(Microsoft Foundation Classes),是一个微软公司提供的类库(class libraries),以C++类的形式封装模槐纳了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和旦没组件的封装明颤类。

1、 文件名App.h (cpp)应用程序类

CMyApp的基类是CWinApp,而CWinApp的基类又是CWinThread,CWinThread类是用来完成对线程(见后面的名词解释)的控制,包括对线程的创建、运行、终止和挂起等。它实神凯际上是Windows首先运行的内容,当这个程序开始时,它将会把主窗口放在屏幕上。C或C++是从main()主函数开始执行,而VC++是从WinMain()函数开始执行,且WinMain()函数就是隐含在此应用程序中

2、 CMainFrm.h (cpp)主框架类

CMainFrm的基类是CFrameWnd,该类是显示主窗口,是我们找到菜单栏、窗口的标题栏以及工具栏的地方,主窗口对象负责窗口中出现的、围绕 *** 作领域的一切,如:图画、文本和其它图形,这个区域称为窗口中的客户区。它用于管理应用程序窗口显示如:标题栏、菜单栏、工具栏、状态栏游族唤、控制菜单、控制按钮等,它是所有MDI(多文档)和SDI(单文档)子窗口的包容器。

3、 文件名View.h (cpp)视图

CMyView的基类是CView,处理客户区,是我们在程序中设置数据格式及显示数据的位置,如我们在创建一个字处理程序时正在编辑的文本,事实上,视图对象是出现在客户区顶部的窗口本身,用于让用户通过窗口来访问文档、视图类。

4、 CMyDoc.h (cpp)文档类

CMyDoc.h (cpp)的基类是CDocument,为程序存储数据,将所有数据存在文档中,而在视图对象中处理并显示。它包含了应用程序在运行期间所用到的数据文穗缺档。

其中 CApp负责整个应用程序的管理,CDOC类中有一个CAPP的指针,也可以认为应用程序是从CApp开始执行的。

CMainFrame是主窗口框架

CDoc是应用程序数据来源(文档)主要是用来管理数据,提供保存和加载数据的功能。有关文件的读写 *** 作在CDoc的Serialize函数中进行。

CView是应用程序数据显示(视图)主要是用来数据显示,以及给用户提供对数据的编辑和修改功能。有关数据或图形的显示 *** 作在CView的OnDraw函数中进行。

基本的应用程序就是由这四个类构成的。用户需要做的就是对这些类实例化,以实现所需要的具体功能。

在SDI(单文档)界面中,菜单响应遵循这样一个顺序:菜单消息先由CMainFrame类接收,CMainFrame并不直接在内部寻找对应的相应函数,而是到CView类寻找。如果CView类有该消息的响应函数,那么就直接调用CView类中的响应函数,否则,转到CDoc类寻找,如果CDoc类中存在该消息的响应函数,那么就直接调用CDoc类中的响应函数,否则,返回到CMainFrame类寻找。如果CMainFrame类中也没有,返回到CApp类中寻找。如果在CApp类中没稿也没有找到,表示没有该菜单的响应函数。

可以这样来理解,菜单消息响应函数的顺序是:CView>CDoc>CMainFrame>CApp。

框架、文档、视图类之间的调用关系

1、主框架(CFrameWnd)中访问视图(CView)

CView* GetActiveView() const

通常定义的视图为CView的派生类枯灶孝,在调用自定义视图对象的方法时

应辩基该这样写:((CMouseKeyView*)GetActiveView())->MyFunc()

2、主框架(CFrameWnd)中访问文档(CDocument)

GetActiveDocument,返回CDocument对象;

3、在视图(CView)中访问文档(CDocument)

inline CMouseKeyDoc* CMouseKeyView::GetDocument()

{return (CMouseKeyDoc*)m_pDocument}

4、在视图(CView)中访问框架(CFrameWnd)

CFrameWnd* GetParentFrame() const

5、在文档(CDocument)中访问框架(CFrameWnd)

CWnd* AfxGetMainWnd()

CWnd* AfxGetApp()->m_pMainWnd

6、在文档(CDocument)中访问视图(CView)

UpdateAllViews

功能:通知所有的视图文档已被修改的信息

原型:

void UpdateAllViews(

CView* pSender, // 要更新的视图指针,如果希望更新所有视

图,将此参数设为NULL

LPARAM lHint=0L, // 包含更改消息的通知

CObject* pHint=NULL // 保管更改消息的对象

}

7、在其他类中访问文档类(CDocument)

CDocument* GetDocument()

{

CFrameWnd* frm=(CFrameWnd*)::AfxGetMainWnd()

ASSERT(frm)

CDocument* pDoc=frm->GetActiveDocument()

ASSERT(pDoc)

ASSERT(pDoc->IsKindOf(RUNTIME_CLASS(CMouseKeyDoc)))

return (CMouseKeyDoc*)pDoc

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12313722.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存