vc6s-chap04-文档与视图结构

合集下载

VC++文档视图

VC++文档视图
VC++程序设计
第5章 文档与视图
本章主要内容
菜单设计 工具栏和状态栏设计 文档与视图结构概述 文档与视图之间相互作用 文档的读写
中北大学计算机系基础教研室
©2013-8 North University of China
2
中北大学计算机系基础教研室
§5.1 创建菜单
菜单是一系列命令的列表,是最常用的命令输入
©2013-8 North University of China
17
中北大学计算机系基础教研室
§5.5 SDI文档的序列化
应用程序中,用户处理的数据往往需要存 盘做永久的备份。将文档类中的数据成员 变量的值保存在磁盘文件中或将存储的文 档文件中的数据读取到相应的成员变量中, 这个过程称为序列化(Serialize)。
方式。在Windows中,几乎所有的命令操作都
与菜单有关。
Windows应用程序中的菜单是按照一定层次来
进行组织的,包括菜单项和弹出菜单,其中弹出
菜单又可以包括菜单项和其他的弹出菜单。
1.创建菜单资源
菜单中的每一个菜单项都由菜单项名和命令ID号两个 基本要素组成。
创建菜单可以有几种方法,最简单的方法是用菜单资 源编辑器进行设计。
©2013-8 North University of China
9
中北大学计算机系基础教研室
§5.3文档/视图结构
利用App Wizard生成单文档和多文档程 序框架时,由它所创建的各个类在一起工 作,构成一个相互关联的结构,称为文档 /视图结构。 在MFC文档/视图结构中数据处理工作分 为:数据管理和数据显示。
1. 弹出【保存】对话框,让用户提供一个文件名。 2. 调用文档对象的CDocument::OnSaveDocument虚

第5章文档视图结构

第5章文档视图结构

Visual C++程序设计教程
单文档(SDI)应用程序和多文档 (MDI)应用程序的另一不同之处在于 使用文档的模板不同。单文档(SDI) 应用程序使用CSingleDocTemplate模板, 而多文档(MDI)的应用程序使用的是 CMultiDocTemplate模板。
电脑基础·实例·上机系列丛
电脑基础·实例·上机系列丛
清华大学出版社
框架窗口
Visual C++程序设计教程
SDI应用程序的框架窗口是从 CFrameWnd类派生的。在创建应用程序 框架时,MFC应用程序向导会自动为该 程序派生一个应用程序框架窗口类,其 缺省名为CMainFrame,相应的文件为 “MainFrame.h”和“MainFrame.cpp”。
Visual C++程序设计教程
下面举例介绍创建单文档程序的方法。
【例5-1】 创建一文本编辑器。正在编 辑的文本文件的内容将显示在视图上, 用户可在视图上对该文件进行编辑和修 改,对当前文件进行的任何编辑和修改 都会反映到文档的修改上。(光盘:\ 第5章\例5_1)
电脑基础·实例·上机系列丛
清华大学出版社
电脑基础·实例·上机系列丛
清华大学出版社
Visual C++程序设计教程
文档视图应用程序
多文档界面(MDI)应用程序能操作文 档,并允许同时操作多个文档。
电脑基础·实例·上机系列丛
清华大学出版社
基本程序结构
Visual C++程序设计教程
文档视图结构是Microsoft为编程人员提 供的一些类,以方便文件和窗口的创建、 显示、保存等。
文档程序分析

VC++6.0定制窗口的方法+框架窗体、文档视图

VC++6.0定制窗口的方法+框架窗体、文档视图

3.基于对话框的应用程序(Dialog based Application)
基于对话框的应用程序非常简单,由应用程序类、 对话框类(可以作为其它控件的容器)构成。它的生 命周期可概括为:通过应用程序类的InitInstance()函 数,构造一个模式对话框对象;调用DoModal函数, 让基于对话框的应用程序像对待普通对话框一样接收 和分配消息;用户退出对话框后,程序也就随之结束。 常见的基于对话框的应用程序有计算器等(以对话框 为容器布局的程序)。
第7章 框架窗口、文档和视图
7.1 应用程序组成结构
1.单文档应用程序(Single Document Interface,SDI) 在单文档界面程序中,用户在同一时刻只能操作一个文
档,如记事本程序。在这些应用程序中,打开文档时会自 动关闭当前打开的活动文档,若文档修改后尚未保存,会 提示是否保存所做的修改。因为一次只开一个窗口,因此 不像WORD那样需要一个窗口菜单。单文档应用程序一般 都提供一个“文件”菜单,在该菜单下有一组命令,用于新 建文档、打开已有文档、保存或另存为等。这类程序相对 比较简单,常见的应用程序有终端仿真程序和一些工具程 序。
在文档视图结构中文档类的主要任务通常是对数据进行管理和维护数据将保存在文档类的成员变量中视图通过对这些变量的访问来获取或返回数据并能通过这种方式来更新并显示数据
VC++6.0 定制窗口的方法
VC++6.0 是 Microsoft 新近推出的可视化 C++集成开发环境。它在继承以前 VC++的 基础上增加了许多新的功能,用于支持 Win32 平台应用程序、服务程序和控件的开发。VC++5.0 提供了强 大、快捷的编程工具,其中最基本的是三个导航:AppWizard 用于程序框 架的生成,AppStudio 用于资源 的编辑,ClassWizard 用于类的编辑和管理。其中,窗口 、菜单等无需用户编写程序,而由系统自动生成。 但在许多情况下,用户要设置自己希 望的窗口(即定制窗口)。

VC第三章,MFC框架之文档与视图

VC第三章,MFC框架之文档与视图

实例:为MyDraw画线程序添加“画笔选择”工具栏(该例以另一种方式实现工 具栏按钮的基本功能).
(1)在视图类中头文件中手工添加工具条的消息映射函数的声明: afx_msg void OnPenChioce(UINT nID); (2)在实现文件中加入消息映射宏: ON_COMMAND_RANGE(ID_PEN_RED,ID_PEN_WIDTH,OnPenChioce)
3、为菜单命令设置加速键 在资源视图Accelerator中IDR_MAINFRAME项的加速键列表 最后一空行操作。
4、为新菜单添加“弹出式快捷菜单”
利用类向导为视图类添加WM_CONTEXTMENU消息处理函 数,并添加如下代码:
CMenu menuPopup; //声明菜单对象
if (menuPopup.CreatePopupMenu())
实例:为前述Biblioteka DrawCoins程序的工具栏添加两个对应按钮.
2、添加用户自定义工具栏的方法 添加用户自定义工具栏步骤: (1)在工程中插入新工具条资源, 并添加相关按钮; (2)在CMainFrame类头文件中加入:CToolBar my_ToolBar;
(3)在MainFrame.cpp文件的Create()函数中模仿生成标准工 具栏的方法, 书写生成新工具栏的语句, 并在最后“停泊 工具栏”的函数中加入第2个参数 AFX_IDW_DOCKBAR_LEFT;
第三章 MFC框架之文档与视图
本章内容
• • • • • • • • • MFC应用程序的开发流程 AppWizard生成的文件类型 ClassWizard的功能与应用初步 用户工程中“文档与视图结构” 菜单设计及应用 鼠标消息的处理 工具栏与状态栏设计 文档的读写 滚动视图与多视图

VC6.0界面和英文菜单含义

VC6.0界面和英文菜单含义

VC++6.0系统开发环境在Windows98/2000/XP操作系统中正确安装了Visual C++6.0后,可以启动Visual C++6.0系统。

第一次运行时,将显示出“Tip of the Day”对话框,单击“Next”命令按钮,可看到有关各种操作的提示;如果不选中“Show tips at startup”复选框,那么以后运行Visual C++6.0时将不再出现此对话框。

单击“Close”命令按钮关闭此对话框,进入Visual C++6.0系统开发环境。

1开发环境的菜单功能Visual C++6.0开发环境界面由标题栏、菜单栏、工具栏、项目工作区窗口、文档窗口、输出窗口以及状态栏等组成。

在开发环境界面中,可以看到在它的上方排列着一系列菜单,如图1所示,而每一个菜单下都有各自的菜单命令。

在进一步与开发环境打交道之前,先了解各个菜单命令的基本功能是很有必要的,因为大部分的操作都是通过菜单来完成的。

图1VC++主菜单栏1.File莱单File菜单中的命令主要用来对文件和项目进行操作,如“新建”、“打开”、“保存”、“打印”等。

其中各项命令的功能描述如表1所示。

表1File菜单命令的快捷键及功能描述菜单命令快捷键功能描述New Ctrl+N创建一个新项目或文件Open Ctrl+O打开已有的文件Close关闭当前被打开的文件Open Workspace打开一个已有的项目Save Workspace保存当前项目Close Workspace关闭当前项目Save Ctrl+S保存当前文件Save As将当前文件用新文件名保存Save All保存所有打开的文件Page Setup文件打印的页设置(续表)菜单命令快捷键功能描述Print Ctrl+P打印当前文件内容或选定的当前内容Recent Files选择打开最近的文件Recent Workspace选择打开最近的项目Exit退出Visual C++6.0开发环境2.Edit菜单Edit菜单中的命令用来使用户方便快捷地编辑文件内容,如进行删除、复制等操作,其中大多数命令功能与Windows中标准字处理程序的编辑命令一致,各项命令的快捷键及它们的功能描述如表2所示。

vc_6单文档应用程序 vc入门ppt

vc_6单文档应用程序 vc入门ppt

两类文档视结构程序
• 单文档界面(SDI)应用程序 • 多文档界面(MDI)应用程序
SDI
MDI
应用程序向导生成的实现文件
• 对应于一个头文件中定义的类,都有一个类的实 现文件。在实现文件中主要定义在头文件中声明 的成员函数的实现代码和消息映射。 • 值得说明的是,向导生成的成员函数有很多,不 要因为没有使用某个成员函数而删除其声明和实 现代码。并且,用户一般不要轻易修改文件中那 些以灰色字体显示的代码,因为这些代码是通过 资源编辑器或ClassWizard类向导进行维护的。
从AppWizard向导开始……
CObject CCmdTarget
CWinThread CDocument
CWinApp
CWnd
CFrameWnd CView CHelloDoc CMainFrame CHelloView
CHelloApp
CFrameWnd
CView
CDocument
CWinApp 应用程序类
2.1 文档类头文件
向 导 为 项 目 Hello 生 成 了 文 档 类 的 头 文 件
HelloDoc.h, 该 头 文 件 用 于 定 义 文 档 类
CHelloDoc。CHelloDoc 类 是 MFC 的 CDocument
类的派生类,它主要负责应用程序数据的保存和 装载,实现文档的序列化功能。
4.1应用程序类头文件
向导为项目Hello生成了应用程序类的头文件
Hello.h,该头文件用于定义应用程序类CHelloApp。
CHelloApp类是MFC的CWinApp类的派生类,它主 要负责完成应用程序的初始化、程序的启动和程序 运行结束时的清理工作;接受所有事件消息,并将 这 些 消 息 传 递 给 由 CFrameWnd 派 生 的 类 和 由

VC++6.0入门【第八章 文档和视图】

VC++6.0入门【第八章 文档和视图】

第8章文档和视图MFC应用程序的核心是文档/视图结构。

在前面章节的学习中,已经接触了不少文档/视图结构的应用程序,本章将详细分析其结构和原理,并进一步学习使用复杂的文档结构、构造更加丰富的视图。

8.1 文档/视图概述使用MFC的AppWizard可以创建三种类型的应用程序:(1)单文档界面的应用程序(SDI:Single Document Interface)(2)多文档界面的应用程序(MDI:Multiple Documents Interface)(3)基于对话框的应用程序(Dialog based)基于对话框的应用程序框架非常简单,由应用程序类、对话框类构成。

通过应用程序类的InitInstance()函数,构造一个模式对话框对象;调用DoModal()函数,让Windows对话框处理程序象通常情况一样接受和分配消息;用户退出对话框后,程序也就结束了。

我们已经知道SDI应用程序由应用程序类(CWinApp)、框架窗口类(CFrameWnd)、文档类(CDocument)、视图类(CView)和文档模板类(CSingleDocTemplate)共同作用。

MDI应用程序与SDI 应用程序的主要差别在于:MDI有CMDIFrameWnd和CMDIChildWnd两个框架窗口类,前一个派生CMainFrame类,负责菜单等界面元素的主框架窗口管理;后一个派生CChildFrame类,负责相应的文档及其视图的子框架维护。

而SDI由框架窗口类CFrameWnd 派生CMainFrame类。

一个文档可以有多个视图,但一个视图只能对应一个确定的文档。

因此,MDI应用程序需要解决的问题是多个文档的数据管理方法。

在MDI应用程序中,文档模板只支持主窗口。

每打开一个新文档时,都调用文档类的成员函数OnNewDocument(),建立一个由CMDIChildWnd派生的新的MDI子窗口,在子窗口中保存已打开的文档,所有这些细节都由MFC库来处理。

vc6.0使用教程详解.pptx

vc6.0使用教程详解.pptx
可以看到你新建的工程,再双击你新建的工程名 可以查看工程的信息。
8
学海无 涯
在双击工程文件,在这里是 777.files,可以看到该工程的包含的文件
: 其中,Source Files 为包含所有工程的源文件 Header Files 为包含所有工程的头文件 在源文件选项“Source Files ”,右键单击中的“添加目录到工程”,添加你 要打开的扩展名为 .cpp 的源文件。在头文件选项“ Header Files”,右键单 击中的“添加目录到工程”,添加你要打开的扩展名为 . h 的头文件。添加完 你所有的头文件和源文件之后,检查一下是否添加完毕,之后就可以编译了。
5
学海无涯 在菜单栏——文件(的下拉菜单中选择“新建”),在弹出的选择窗口中,选
择 Win32 Console Application(控制台应用程序) ,在填写工程名称,选择一个 程学海无 涯 在点击“确定”,就建立一个简单的工程了。
7
学海无 涯 再点击左边的工程信息右下角的“FileView”选项;
学海无涯 你首先要打开 VC6.0 界面,一般用得较多的是 Win32 控制台应用程序(源程序, 扩展名.cpp), 步骤是:(先工程—后文件—编译—连接---运行) 1,建立一个工程,“文件”——“新建”,出现下面界面:
选择“Win32 Console Application”(控制台应用程序,左边倒数第三个),命 名工程名称,选择保存位置,
进入编辑区,在主界面编写代码:如下编写完之后呢:
4
学海无 涯
可以按编译按钮 调试程序,看看有没有错误,有的话改正,没有的话就可以 再按连接按钮 检查连接(多文件工程时常用,检查文件间是否正常连接), 最后,点运行按钮 ,就可以运行了。 如果是您有代码如:cpp 文件,或 .h 文件,想添加都 VC6.0 里来测试的话,可 以这样做: 首先,要理解一下 文件扩展名为:cpp 和.h 文件扩张名是.h,代表的是头文件,一般是书写一些函数原型,以及一些在整个 程序中常用到的结构体,频繁使用的函数说明,定义等等; 文件扩张名为,cpp 的,是 C++中的源文件,也是最常用到的文件,每建立一个 工程都要至少一个源文件(至少要有一个函数入口——主函数 main() ),包含 了核心代码; 建立与运行说明:(以 VC 6.0 编译器为例,其他编译器类似) 首先,打开 VC 6.0 编译环境;

VC++第5章 文档与视图

VC++第5章 文档与视图

在OnUpdate()中通过调用函数CWnd::Invalidate() 刷新整个客户区,我们也可以在自己的CWnd派生类 中直接调用函数Invalidate()。
总结:刷新视图时默认的函数调用过程: CDocument::UpdateAllViews() →CView::OnUpdate() →CWnd::Invalidate() →OnPaint() →OnDraw()
5.2.1 建立菜单资源
使用MFC AppWizard向导创建文档/视图结构 应用程序时,向导将自动生成Windows标准的菜单 资源和命令处理函数。但这个默认生成的主框架菜 单资源往往不能满足实际的需要,因此我们需要利 用菜单资源编辑器对其进行修改和添加。 例 编写一个单文档应用程序DrawCoin,为程序添 加一个“画硬币”主菜单,并在其中添加“增加硬 币”和“减少硬币”两个菜单项。
当利用MFC AppWizard向导创建一个SDI单 文档应用程序Mysdi时,生成了视图类的一个派生 类,并在派生类中定义了函数GetDocument()。
GetDocument()的Debug版函数代码:
CMysdiDoc* CMysdiView::GetDocument() { ASSERT(m_pDocument-> IsKindOf(RUNTIME_CLASS(CMysdiDoc))); return (CMysdiDoc*)m_pDocument; // m_pDocument是CArchive类的数据成员, // 指向当前文档对象 }

文档、视图、框架窗口之间的关系
一个视图是一个没有边框的窗口,它位于主框
架窗口中的客户区。视图是文档对外显示的窗 口,但它并不能完全独立,它必须依存在一个 框架窗口内。

VC++6.0使用手册(史上最全)

VC++6.0使用手册(史上最全)

图1-1Visual C++界面开项目工作区文件时其他文件随即会自动打开。

在此文件夹下还会创建 Res(资源)、Debug(调试)、Release(发行)等子文件夹。

2.2编辑 在编辑窗口打开、浏览文件、输入、修改、复制、剪切、粘贴、查找、替换、撤销等操作,可以通过菜单完成,也可以通过工具栏按钮完成,这些与 Word 之类的 windows 编辑器用法完全相同,这里就不再重复叙述了。

2.3辅助VC 不仅提供了“语法着色”帮助我们阅读程序,还可以通过一些快捷键检查常见的括号不匹配错误。

MSDN 也可以在编辑过程中提示存在的变量名、函数名。

很多程序员借助类似 Visual Assist X 的工具辅助开发,减少程序出错的可能性。

3.开发 C 程序3.1开发单个 C 语言程序1. 创建一个工作文件夹。

由于开发过程会产生一系列文件,建议每开发一个新的 C 程序都创建一个工作文件夹。

还可以将所有工作文件夹集中到一起,如E:\LXH\EX01-01 、E:\LXH\EX03-02 等。

2. 启动 Visual C++。

3. 新建一个 C 语言源程序。

选择菜单:File 下的 New 菜单项,出现如图 1-2 所示 new(新建)对话框。

图1-2选择菜单File下的New菜单项选择 Files标签下的 C++Source File 在“E:\LXH\EG01-01”文件夹中创建C 程序:eg01-01.c,如图 1-3 所示。

图1-3Files标签4. 输入、编辑源程序。

注意不要输入中文标点符号,要及时按 Ctrl+S 保存文件,如图 1-4 所示。

图1-4输入源程序5.编译、连接。

点击“BuildMiniBar”工具栏上的“Build”按钮进行编译、连接。

也可以选择菜单 Build 下的 Build (F7) 菜单项或Rebuild All菜单项。

更简捷的方法是直接按 F7 功能键。

Visual C++将提示创建默认工作区,如图 1-5 所示。

VC++讲义第16单元 多文档视图结构

VC++讲义第16单元  多文档视图结构

第16单元多文档界面程序本单元教学目标介绍多文档界面(MDI)程序的构造和编程方法。

学习要求理解多文档界面(MDI)程序的构造,掌握其编程方法。

授课内容和框架窗口界面程序、单文档界面(SDI)程序和基于对话框的应用程序一样,多文档界面(MDI)程序也是基本的MFC应用程序结构。

MDI程序的结构最复杂,功能也最强。

其特点是用户一次可以打开多个文档,每个文档均对应不同的窗口;主窗口的菜单会自动随着当前活动的子窗口的变化而变化;可以对子窗口进行层叠、平铺等各种操作;子窗口可以在MDI主窗口区域内定位、改变大小、最大化和最小化,当最大化子窗口时,它将占满MDI主窗口的全部客户区。

MDI不仅可以在同一时间内同时打开多个文档,还可以为同一文档打开多个视图。

16.1MDI应用程序从程序员角度看,每个MDI应用程序必须有一个CMDIFrameWnd或其派生类的对象,该窗口称作MDI框架窗口。

CMDIFrameWnd是CFrameWnd的派生类,除了拥有CFrameWnd 类的全部特性外,还具有以下与MDI相关的特性:1.与SDI不同,MDI的框架窗口并不直接与一个文档和视图相关联。

MDI的框架窗口拥有客户窗口,在显示或隐藏控制条(包括工具条、状态栏、对话条)时,重新定位该子窗口。

2.MDI客户窗口是MDI子窗口的直接父窗口,它负责管理主框架窗口的客户区以及创建子窗口。

每个MDI主框架窗口都有且只有一个MDI客户窗口。

3.MDI子窗口是CMDIChildWnd或其派生类对象,CMDIChildWnd也是CFrameWnd 的派生类,用于容纳视图和文档,相当于SDI下的主框架窗口。

每打开一个文档,框架就自动为文档创建一个MDI子窗口。

一个MDI应用程序负责动态的创建和删除MDI子窗口。

在任何时刻,最多只有一个子窗口是活动的(窗口标题栏颜色呈高亮显示)。

MDI框架窗口始终与当前活动子窗口相关联,命令消息在传给MDI框架窗口之前首先分派给当前活动子窗口。

visual C++文档视图结构

visual C++文档视图结构

5.8 多文档应用程序

【例5-3】 使用多文档模板编写彩色泡泡程序。 解题步骤: (1)用MFC生成一个MDI应用程序框架(取工程名为 My),程序均采用默认设置。 (2)将例5-1和例5-2的代码拷贝到程序中即可。



5.9.2 窗体视图
RUNTIME_CLASS(CMyView));
5.3 框架类CMainFrame
函 数 含 义 m_bAutoMenuEna 控制框架是否自动禁用没有消息处理 ble 的菜单项 rectDefault 在创建时默认尺寸的矩形 Create 创建窗口的方法,可以重载来改变一 些窗口属性 LoadFrame 从资源加载框架 SaveBarState 保存各种条的状态 SetDockState 设置停靠的状态 ShowControlBar ActivateFrame 显示条,可以用来显示自己侯添加的 工具条、对话条等 使边框窗口对用户可见或可用
函 数 GetFirstDocPosition GetNextDoc LoadTemplate AddDocument RemoveDocument GetDocString CreateNewDocument 含 义 获取列表中的第一个文档的位置 获取当前位置下一个文档 加载指定的模板 给文档模板添加指定的模板 从文档模板列表中删除文档 获得与文档相关的字符串 创建一个新的文档
GetProfileString
含 义 指明应用程序的名字 表明应用程序的命令行 应用程序主窗口指针 可执行文件名 配置INI文件名 配置注册表主键值 加载一个图标资源 从应用程序的.INI文件中的入口获 取一个整数 从应用程序的.INI文件中的入口获 取一个字符串
5.2应用程序类CWinApp

文档、视图、框架窗口、文档模板之间的相互关系

文档、视图、框架窗口、文档模板之间的相互关系

学习笔记 太奇
)pMain->GetActiveView(); 5) 获 得 当 前 文 档 指 针 CDocument * pCurrentDoc =(CFrameWnd
*)m_pMainWnd->GetActiveDocument(); 6) 获得状态栏与工具栏指针 CStatusBar * pStatusBar=(CStatusBar
2) 在 App 中获 得 MainFrame 指针 CWinApp 中的 m_pMainWnd 变量 就 是 MainFrame 的指针。
也可以: CMainFrame *pMain =(CMainFrame *)AfxGetMainWnd(); 3) 在 View 中 获 得 MainFrame 指 针 CMainFrame *pMain=(CmaimFrame *)AfxGetApp()->m_pMainWnd; 4) 获 得 View ( 已 建 立 ) 指 针 CyouView *pView = (CyouView *
VC 中编程对于刚刚开始学习的同学,最大的障碍和问题就是消息机制和指 针获取与操作。其实这些内容基本上是每本 VC 学习工具书上必讲的内容,而且 通过 MSDN 很多问题都能解决。
下面文字主要是个人在编程中指针使用的一些体会,说的不当的地方请指 正。一般我们使用的框架是 VC 提供的 Wizard 生成的 MFC App Wizard(exe)框架 , 无论是多文档还是单文档,都存在指针获取和操作问题。
学习笔记 太奇
IsKindOf()成员函数时行检查,如: pView->IsKindOf(RUNTIME_CLASS(CTestView)); 即可检查 pView 所指是否是 CTestView 类。 有了以上基础,我们已经可以从文档类取得任何类的指针。为了方便,我们

第2章 VC 6.0的程序结构及工具

第2章  VC 6.0的程序结构及工具

在VC 6.0中,当用户创建工程或工作区时,系统会 创建工作区生成工作区文件dsw文件,并将相应的工程添 加到工作区中,同时用户也可以手动的添加工程到工作 区中。而创建工程时,则会生成以dsp为扩展名的工程文 件。在工程文件中,用户就可以添加源代码文件、头文 件、资源文件等各种程序资源。
2.3.3
宏及插件
宏是Visual Studio开发环境为用户提供的一种复用重 复操作的机制。用户可以将自己常用的操作录制成宏, 并将其安装到VC 6.0的开发环境中,也可以使用VC 6.0提 供的预定义宏。单击“Tools”|“Macro”命令,可以打开 Macro对话框
2.2
VC 6.0向导
为了简化程序开发过程,VC 6.0为用户提供了丰富 的向导功能。使用向导可以快速的创建各种不同类型的 工程和类。本节中首先介绍VC 6.0中支持的工程类型, 在此基础上介绍使用工程向导创建不同类型工程的方法 ,最后介绍VC 6.0的类向导及其使用。
2.2.1
工程类型
第1章中曾介绍过,广义上讲VC 6.0是无所不能的。 为了体现VC 6.0的灵活性,本小节讲述VC 6.0所提供的工 程类型。
第2章
VC 6.0的程序结构及工具
第1章中概要介绍了VC 6.0的开发环境,并以一个示 例讲解了VC 6.0开发的一般步骤。本章将在第1章的Hello World示例基础上讲解VC 6.0的程序结构,并介绍VC 6.0 的向导、资源编辑器和调试工具的使用方法。
2.1
工程和工作区
VC 6.0中使用工程和工作区来组织程序,其编译是基 于工程编译的。而复杂程序的实现就需要将其分解为多 工程,进而组织成工作区。本节就介绍工程和工作区的 基本概念、文件组成以及创建工程和工作区的方法。
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(4) 成员函数 OnInitialUpdate
原型为:virtual void OnInitialUpdate( );
通过重载OnInitialUpdate函数可以完成视图类的初 始化。应用程序框架在创建视图时,首先调用OnCreate 函数,然后调用OnInitialUpdate函数。
4.2.3 CMyPainterView类文件代码
4.2.4 多视图
(1)同一文档的多个视图对象,每个对象置于独立的 MDI子窗口中。例如,选择“窗口”菜单的“新建窗口” 命令打开同一文档的多个MDI子窗口,然后可以在多个 MDI子窗口中同时查看文档的不同部分。
(2)同一文档边框窗口中有同一文档的多个视图对象 。例如,分割窗口可以将单个文档边框窗口的视图空间 分割成多个独立的视图,应用程序从同一视图类中创建 多个视图对象。
调用该成员函数以使视图反应文档数据的变化, 该函数被文档类中的UpdateAllViews函数所调用。不过 用户也可以直接在派生视图类中调用该函数,通常派 生视图类的OnUpdate函数要访问文档,读取文档的数 据,然后再更新视图的数据成员或控件,以便反映出 文档的变化。缺省情况下,OnUpdate使整个视图窗口 无效,同时触发OnDraw函数,使用更新后的文档数据 重新绘制窗口。
// TODO: add storing code here } else {
// TODO: add loading code here } }
(8) 成员函数 UpdateAllViews
原型为:void UpdateAllViews( CView* pSender, LPARAM lHint = 0L, CObject* pHint = NULL );
(3)单个边框窗口中有不同类的视图对象,多个视图 共享单个边框窗口,每个视图从不同类构造。例如,可 以在一个视图显示文本文档,而在另一视图显示图形文 档。
4.2.5派生的视图类
派生视类
说明
CScrollView
为视图提供滚动和缩放显示功能
CFormView
提供可滚动的视图来显示由对话框控件组成的表单
当用户选择“文件”菜单的“保存”或者“另存为” 命令时,将调用该函数打开指定文件,并调用Serialize 函数向文件中写入文档数据。
(6) 成员函数 OnCloseDocument
原型为:virtual void OnCloseDocument( );
当一个文档被关闭时,框架就会调用这个函数。函数 的默认操作是关闭所有用于浏览文档的框架窗口和视图, 清除文档的内容,并调用DeleteContents函数删除文档中的 数据。
CMainFrame类的文件
其中Dump和AssertValid函数只是在应用程序的 调式版中起作用,用户可以重载该函数来诊断程序运 行时出现的问题。在应用程序的发行版中,这些诊断 函数将不被编译。
PreCreatewindow消息处理函数在窗口创建之前 被调用,用于定制窗口风格。
OnCreate消息处理函数在创建框架窗口时被调用 。在该函数中首先执行基类CMDIFrameWnd的成员 函数OnCreate创建框架窗口,然后为该窗口创建工具 栏和状态栏。
4.4 文档模板类
为了管理创建文档及其关联的视图和框架窗口 的复杂过程,框架使用了两个文档模板类:
用于单文档应用程序的CSingleDocTemplate 用于多文档应用程序的CMultiDocTemplate 它们都是CDocTemplate的直接派生类。
使用MFC应用程序向导生成InitInstance函数中创建 CMultiDocTemplate的过程。
该函数返回指向与视图相联的文档对象指针,如 果没有文档与视图相联,则返回NULL。调用该函数 以获得一个指向当前视图所对应的文档类指针,利用 它能够对文档类的成员函数和公共数据成员进行访问。
(3) 成员函数 OnUpdate
原型为:virtual void OnUpdate( CView* pSender, LPARAM lHint, CObject* pHint );
当用户选择“文件”菜单的“打开”命令时, 将调用OnOpenDocument来打开指定的文件, 并调用DeleteContents来清除文档中的数据, 调用Serialize来从磁盘文件中加载新文档。
(5) 成员函数 OnSaveDocument
原型为:virtual BOOL OnSaveDocument(LPCTSTR lpszPathName);
CRecordView
在控件中显示数据库表中字段的表单视图
CDaoRecordVie w CCtrlView
在控件中显示数据库表中字段的表单视图 控件视图类
CEditView CRichEditView CListView CTreeView
CctrlView的派生类,封装了编辑控件的功能,提供了一个简单的文 本编辑器的视图类 CctrlView的派生类,封装了RichEdit控件,支持多种字体、颜色、 OLE的高级编辑器的视图类
UpdateAllViews(NULL);
如果在派生视图类的成员函数中调用 UpdateAllVies函数,调用形式为:
GetDocument()->UpdateAllViews(this);
4.1.3 CMyPainterDoc类文件代码
4.1.4 多文档类型 AppWizard创建的应用程序框架开始只支持单个 文档类。如果应用程序要支持多文档类型,那么必须 创建新的文档类。每种文档类型都有自己的文档类和 视图类。当用户选择“文件”菜单的“新建”命令时 ,应用程序将显示对话框,列出所支持的文档类型, 然后再按用户选择的类型创建文档。每种文档类型都 由自己的文档摸板对象管理。
4.1.1 使用文档管理数据的一般步骤
在应用程序中处理文档的一般步骤为: (1)以CDocument类为基类派生出自己的文档类。 (2)在派生的文档类中添加用于保存数据的成员变 量。 (3)编写实现读和修改文档数据的成员函数。 (4)重载文档类的成员函数Serialize,实现将文档 数据写入磁盘和从磁盘读出文档数据的操作。
4.2.2 视类(CView类)中的主要数据成员 和成员函数
(1) 成员函数 OnDraw
原型为:virtual void OnDraw( CDC* pDC ) = 0;
应用程序几乎所有的绘制工作都是在OnDraw成 员函数中实现的,编程时必须在视图类中重载此函数。
void CMyPainterView::OnDraw(CDC* pDC) {
要创建新的文档类,请打开ClassWizard ,然后用ClassWizard来创建。创建时,请选 择CDocument类作为派生新类的基类,并提供
必要的文档信息,然后再实现这个新类的数据 。接着在应用程序对象的成员函数InitInstance 中增加一次对AddDocTemplate函数的调用。
CctrlView的派生类,封装了列表控件的功能,管理项目列表的视图 类 CctrlView的派生类,封装了树形控件功能的视图类
4.3 窗口框架类
MFC使用窗口框架类管理框架,使用视图类管 理框架中的视图。用户与文档之间的交互操作发 生在视图的客户区内,而不是框架窗口的客户区 内。框架窗口提供了环绕视图的可见框架,其中 包括菜单、最小化和最大化窗口按钮等。
(7) 成员函数 Serialize
序列化是指将对象写入永久性存储媒体(如磁 盘文件)或从其中读取对象的过程。在文档类中通 常使用Serialize函数完成序列化操作。
void CMyPainterDoc::Serialize(CArchive& ar) {
if (ar.IsStoring()) {
(3) 成员函数 DeleteContens
原型为: virtual void DeleteContens( );
DeleteContens函数用于在不删除文档对象的情况下 清除文档中的数据。
(4) 成员函数 OnOpenDocument
原型为:virtual BOOL OnOpenDocument(LPCTSTR lpszPathName);
(2) 成员函数OnNewDocument
原型为:virtual BOOL OnNewDocument( );
当用户选择“文件”菜单的“新建”命令时,将 调用这个函数对文档进行初始化。如果是多文档应用 程序,将创建一个新文档并调用它完成初始化。如果 是单文档应用程序调用这个函数初始化已经存在的文 档。
每个应用程序都有一个主边框窗口,主边框 窗口标题栏中显示有应用程序的名称。每个文档都 有一个文档边框窗口。
对 于 每 个 SDI 应 用 程 序 , 都 有 一 个 从 CFrameWnd类派生的边框窗口,该窗口既是主边框 窗口,又是文档边框窗口。
对于,每个MDI应用程序,主边框窗口是从 CMDIFrameWnd类派生的。MDI主边窗口中含有一个 称为MDICLIENT窗口的子窗口,该窗口管理主边框 窗口的客户区并有自己的子窗口(从CMDIChidWnd派 生的文档边框窗口)。因此,在MDI应用程序中,MDI 主边框窗口管理MDICLIENT窗口,MDICLIENT窗口 再管理所有的MDI子窗口。
4.1.2 文档类(CDocument类)中的 主要数据成员和成员函数
(1)文档类的数据成员 文档数据必须用文档类的数据成员来实现。在定
义文档数据成员时,为了设置和获取数据项,通常把成 员函数添加到文档类中,并在成员函数上执行其他有用 操作。
视图通过指向文档的指针来访问文档对象,可以 通过调用CView::GetDocument来获取指
如果所有的视图都要更新,那么参数pSender为 NULL,否则为指向视图的指针;1Hint包含与修改有 关的信息,可以传递任何数据;pHint为指向用于保 存修改信息的对象,可以传递CObject派生的任何对 象的指针。
相关文档
最新文档