VC入门必备--基础知识(四)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值