VC入门必备--基础知识(四)
VC入门必备--基础知识(四)Document, View和Application Framework在MFC中,Document, View和Application Framework是3个非常重要的概念。顾名思义,Application Framework就是应用程序框架,你可以用这个框架来建立自己的Windows程序,可以节省不少时间。你也可以不用框架而用手工一行一行的写出源代码,这
VC入门必备--基础知识(四)
Document, View和Application Framework
在MFC中,Document, View和Application Framework是3个非常重要的概念。顾名思义,Application Framework就是应用程序框架,你可以用这个框架来建立自己的Windows程序,可以节省不少时间。你也可以不用框架而用手工一行一行的写出源代码,这样做的话工作量就太大了。如果你用Application Framework的话,框架就会自动产生一些源程序代码和标准的用户界面,你需要做的工作就是提供剩余的代码,完成特定的任务。
另外,用MFC编程还要掌握一种重要的结构,即Document/View结构。在这里,Document是指用户正在使用的数据,它是一个Data Object;View是指用户所见到的Document的视图,它是一个Window Object。例如在Excel中,同一数据可以制成不同的报表图(例如饼状图,条形图),而且当数据改变时,报表图也随之改变。使用Document/View结构可以利用Application Frame以及MFC的很多好处。而不使用Document/View结构,对于某些简单的程序可以提高性能,并可减少程序的大小。总的来说,Document/View结构就是通过CDocument和CView来为Document和View提供框架。
MFC中的应用程序主要可以分成两类,即SDI(单文档界面,例如记事本)和MDI(多文本界面,例如 Word)。SDI应用程序一次只能打开一个文档框架窗口,而MDI应用程序在一个主框架窗口中可以有多个子窗口,这些子窗口可以包含不同类型的文档。 MDI比较复杂,我会在《提高篇》中再详细讨论这个问题的,在《入门篇》中我们只讨论SDI。
在SDI应用程序中,主要有以下Object(结合上一节的内容有助于理解):
1、Document:从CDocument派生,代表应用程序的数据;
2、View:从CView派生,代表应用程序数据的”外貌”,用户通过View来察看和操作Document;
3、Frame Window:从CFrameWnd派生,提供了用来显示View的文档框架窗口(Document Frame Window)。在SDI中,Document Frame Window也就是应用程序的主框架窗口(Main Frame Window),View就是显示在Frame Window里面的;
4、Document Template:在SDI中是从CSingleDocTemplate派生的,CSingleDocTemplate又是从CDocTemplate派生的,主要用于创建和管理某种类型的Document,每个Document Template创建和管理一个Document;
5、Application:从CWinApp派生,控制上面的4种Object,并指定应用程序的行为,例如初始化等。Application Object也用来响应用户的行为(例如由用户产生的Command Message)。
在MFC应用程序中,并不是需要以上所有的Object,以上那些Object是可以按照不同的规律来组合使用的。例如在非Document/View结构的程序中,有以下两种情况:
1、一个CWinApp Object和一个对话框(要Modal的,即类似文件打开那种对话框),在这种应用程序中,对话框用来显示和储存数据;
2、一个CWinApp Object、一个Main Frame Window(CFrameWnd)和一个View,在这种应用程序中,View用来定位数据储存和显示的地方。
注意:在非Document/View结构的程序中,一般是以重载CWinApp::InitInstance函数开始的,重载CWinApp::InitInstance函数的目的就是创建对话框或窗口。
操作系统、应用程序和应用程序组件之间的通讯是通过不同种类的Message来实现的。例如,当创建一个应用 程序的实例时,操作系统会发送一系列的Message给应用程序,应用程序就会响应相应的Message来初始化自己。键盘和鼠标也会使操作系统产生 Message并把这些Message发送给相应的应用程序。用户界面组件(例如按钮)也会产生Message并将Message发送给他们的父窗口。最 重要的两种Message是Window Message和Command Message。MFC通过CWnd和CWnd的派生类(例如:CView, CFrameWnd等)来提供对Window Message的支持,通过从CCmdTarget派生的类来提供对Command Message的支持。
Application Framework会把Message和处理该Message的函数联系起来,这样MFC就可以把Message映射到处理该Message的函数。每个Windows Message都有一个预先定义的宏(Macro),包括一个隐含的ID和处理函数的名字;而每个Command Message的Macro包括一个指定的ID和处理函数的名字。请看下面的源程序:
BEGIN_MESSAGE_MAP(CMyView, CView) //这是一个Macro,标志Message映射的开始,注意参数为Message映射的Class(这里是CMyView)及其基类(这里是 CView)的名字。这样的话,假如在CMyView中找不到该Message的处理函数,Framework还会在CView中继续寻找该 Message的处理函数。
ON_WM_CREATE() //这是一个处理Window Message的宏,不需要Message的ID和它的处理函数的名字作为参数(因为这两个参数是隐含的),在这里,ON_WM_CREAT所处理的 Message是WM_CREATE,该Message的处理函数是OnCreate。大家分析一下宏(ON_WM_CREATE),Message (WM_CREATE)和Message的处理函数(OnCreate)这三者之间的命名规则。
ON_COMMAND(ID_APPLY_SEQUENCE, OnApplySequence) // 这是一个处理Command Message的宏,需要Message的ID(ID_APPLY_SEQUENCE)和处理该Message的函数的名字(OnApplySequence)这两个参数
END_MESSAGE_MAP() //这是结束Message映射的宏
你可以用Visual自带ClassWizard或者WizardBar这两个工具来添加Message映射,也可以用手工的方法来添加Message映射,我会在后面的章节中详细讨论Message的问题的。
以下是本节新出现的专业名词
应用程序框架 = Application Framework
单文档界面 = Single Documnet Interface, 即SDI
多文档界面 = Multiple Documnet Interface, 即MDI
文档框架窗口 = Document Frame Window
主框架窗口 = Main Frame Window
宏 = Macro
用AppWizard来创建第一个应用程序
几个小提示:
多谢你阅读我的csdn blog,我已经建立了个人博客,基本把这里的文章都转到个人博客了,欢迎交流指教!
VC入门必备--基础知识(四)
http://www.jeanva.cn/post/55.html
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)