1 / 70
文档名称:

vc++8.ppt

格式:ppt   页数:70页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

vc++8.ppt

上传人:cdsqbyl 2015/5/24 文件大小:0 KB

下载得到文件列表

vc++8.ppt

相关文档

文档介绍

文档介绍:Visual C++程序设计
东北大学
陈东明
2017/6/28
1
第8章 文档视图结构
可重用的Frame Window基类
从视图中分离文档
文档的读写
打印和打印预览
拆分窗口与多视图
2017/6/28
2
可重用的Frame Window基类
C++允许程序开发人员生成可重用的“软件组件”,这些组件可以很容易地应用到应用程序中。
可重用基类难以编写
对于可重用的基类,用户必须预测将来程序设计的需要,包括自己和其他用户。用户必须编写一个常规的、完全的、有效的并且容易使用的类。
在一个产品设计环境中,可重用的基类可能会放弃常规的软件开发周期。为一个项目所编写的类要用于另外一个项目的话,可能需要扩展和把它深层次地一般化。
如果用户长期从事于软件商业,动手建立真正可以重复使用的组件是非常有益的。
2017/6/28
3
CPersistentFrame类
CPersistentFrame类是从CFrameWnd派生来的。 CPersistentFrame类支持记忆下列特征值的可持续SDI框架窗口。
窗口尺寸
窗口位置
最大化状态
最小化状态
工具栏和状态栏的启用情况和位置
当用户结束用CPersistentFrame类建立的应用程序的时候,上述信息会保存在硬盘上的Windows Registry(注册表)中。当应用程序再次启动的时候,它就读取注册表并把框架恢复到上次退出时的状态。
用户可以在任何SDI应用程序中使用这个可持续的视图类,只用CPersistentFrame来代替应用程序派生框架文件中的CFrameWnd。
2017/6/28
4
CFrameWnd类和ActivateFrame成员函数
在一个MFC SDI应用程序中,主框架窗口总是视图窗口的父窗口。这一框架窗口先创建,然后,控制栏和视图作为子窗口创建。应用程序主框架保证子窗口在用户改变框架窗口的大小时正确地扩大和缩小。在框架创建之后改变视图的尺寸没有意义。
控制框架尺寸的关键是CFrameWnd::ActivateFrame成员函数。应用程序框架在SDI主框架创建过程中调用这个虚拟函数。框架的任务是以nCmdShow参数调用CWnd::ShowWindow函数。ShowWindow使连带菜单、视图窗口和控制栏一起的框架窗口显示出来。
如果用户重载派生框架类中的ActivateFrame,那么可以在把参数传递到CFrameWnd::ActivateFrame函数之前改变nCmdShow的值。还可以调用设置框架窗口的大小和位置的CWnd::SetWindowPlacement函数来设置控制栏为可见状态。因为所有的变化在框架窗口变得可见之间完成,所以屏幕上不会有讨厌的闪烁。
2017/6/28
5
PreCreateWindow成员函数
在CWnd中说明的PreCreateWindow,是另外一个用户可以重载它以便在窗口显示之前改变窗口特性的虚拟函数。框架在调用ActivateFrame之前调用该函数。AppWizard总是在项目的视图和框架窗口类中产生一个PreCreateWindow函数。
这个函数有一个CREATESTRUCT结构参数,在这个结构中有两个数据成员style和dwExStyle。用户可以在把这个结构传向基类的PreCreateWindow函数之前修改这些数据成员。style标志决定了窗口是否有边界、滚动条、最小化框等等。 dwExStyle标志控制着其他的特性。
CREATESTRUCT的成员lpszClass对改变窗口的背景刷、光标和图标也是非常有用的。在一个框架窗口中改变这些是毫无意义的,因为视图窗口覆盖了这一客户区域。
如果用户重载了可持续框架类中的PreCreateWindow函数,所有派生类的窗口将都使用在基类中设计的这些特性。
2017/6/28
6
Window注册表
如果使用了Win 16位基础上的应用程序,可能会看到INI文件。在Win 32位基础上的应用程序仍然可以使用INI文件,但是Microsoft建议用户用Window注册表来代替它。注册表是作为一种分层数据库来组织的,在数据库中字符串和整数数据通过多部件键来访问。
MFC库提供了四种CWinApp成员函数,来延长使用INI文件的日期和访问注册表。从VC++ ,AppWizard在应用程序的InitInstance函数中产生一个如下所示的对CWinApp::SetRegistryKey的调用。
SetRegistryKey(_T(“Local AppWizard-Genereated Applications”));
如果删除这