protected:
//{{AFX_MSG(CSingleDoc1View)
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
#ifndef _DEBUG // debug version in SingleDoc1View.cpp
inline CSingleDoc1Doc* CSingleDoc1View::GetDocument()
{ return (CSingleDoc1Doc*)m_pDocument; }
#endif
现在它只包含了一个类定义的基本框架。我们可以看到,其中定义了两个很重要的函数:OnDraw和GetDocument。前者用于重绘窗口,后者用于获得指向视图对应的文档的指针。我们将在后面详细介绍这两个函数。实际上我们将来要做的工作主要是向视图中加入各种有用的函数。
前面我们已经对于AppWizard产生的程序框架有了一个大致的了解。我们也可以试着运行一下程序看看它能做些什么。总结起来,程序框架能够完成以下任务:
n 自动创建文档模板、视图、文档和框架窗口。
n 初始化框架窗口,构建菜单,并将每个菜单项和相应的函数(函数可能还是空的,需要程序员去加入代码)连接起来。创建状态条和工具条。
n 在程序刚运行时自动的打开一个文档和一个视图窗口。
简单的说,它为我们生成了一个标准的框架,省去了我们的不少麻烦。
因此,在开发应用时我们只需将精力集中在我们的任务上,主要包括以下内容:
n 为文档加入数据成员,定制一些重要的函数使菜单能够进行实质性的操作。
n 为视图编写一些成员函数,来支持用户对文档的修改,并正确的显示文档。
至此我们大致介绍了文档/视图结构的一些基本概念和我们需要研究的重点。下一节我们将结合一个单文档编辑器来讲述如何实现文档/视图结构。
常用的文档应用程序分为单文档应用和多文档的应用。单文档应用在任一时刻只能处理一个文档和显示该文档的一个视图窗;而多文档应用可以处理几个不同的文档。由于处理方式不同,其相应的程序编制也不太一样。