VC++多文档编程

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

教案

2007 ~2008 学年第一学期

主讲教师

课程名称面向对象程序设计(VC++)课程类别专业基础课

学时及学分80、4

授课班级

使用教材

VC++的使用及面向对象软件工程实例分析

系(院、部)

教研室(实验室) 计算机应用教研室

课时授课计划

课次序号:

一、课题:ch6 多文档编程

二、课型:讲授

三、目的要求:

1、理解多文档程序的结构,熟悉多文档窗口的特点。

2、掌握多文档程序的设计方法。

3、熟悉视图分割的方法和应用。

四、重点、难点:

重点:多文档程序的结构和设计方法。

难点:多文档程序中视图与文档的交互作用较难理解。

五、教学方法及手段:

案例式教学:设计目标、关键技术、结合实例讲解语法、总结。

六、参考资料:

《面向对象程序设计与VC++实践》揣锦华编著,西安电子科技大学出版社,第11章

《C++面向对象程序设计》李涛编著,高等教育出版社,第9章

七、作业:

习题6.2 6.3 6.4 6.6

八、授课记录:

九、授课效果分析:

十、教学进程(教学内容、教学环节及时间分配等)

1、复习

多文档程序的框架结构:5个主要的类比如,

创建多文档程序ex_mdi,包含的主要类有:CmainFrame Cex_mdiView Cex_mdiDoc Cex_mdiApp CchildFrame

与单文档程序相比,多了一个子窗口类类CchildFrame

2、导入课题

多文档程序可以运行用户同时打开和使用多个文档,比单文档程序更方便,比如Word、Excel等。

3、教学内容

ch6.1 多文档程序的结构和多文档窗口特点

[通过实例分析]

例6-1:建立一个多文档应用程序,用户能打开多个文档,并能在多个文档中输入信息,并可以利用“保存/另存为”保存每个文档中输入的信息,也可以利用“打开”新建的子窗口显示文件的内容。

关键技术:

利用视图类的ONCHAR消息映射函数OnChar实现键盘输入;

利用文档的串行化实现数据的保存、文件的打开。

实现过程:

(1)建立单文档应用程序ex_mdi

(2)为文档类Cex_mdiDoc添加一个字符串变量,用于保存输入的字符串。

CString m_strText;

(3)在文档类Cex_mdiDoc的构造函数中初始化字符串变量。

m_strText.Empty(); //初始化字符串为空

(4)处理键盘输入:为视图类添加WM_CHAR消息映射函数OnChar(),在函数

中添加“取得输入字符”代码:

pDoc->m_strText+=nChar;

Invalidate(); //强迫调用OnDraw()函数,更新视图

[运行:从键盘输入,但看不见输入的信息]

(5)在视图中显示输入的内容:在视图类的OnDraw()中添加输出代码。

pDC->TextOut(0,10,pDoc->m_strText);

[运行:在指定位置显示从键盘输入的内容。但是用“文件/保存”命令将内容保存到文件后,文件内容为空]

(6)实现文档磁盘存取(即串行化),通过重载文档类中的Serialize()函数实现:ar<

ar>>m_strText; //从磁盘读出文档

(7)运行:

在程序打开的第一个子窗口中输入“This is the first MDIChildWnd”,利用“新建”创建第二个子窗口,输入“This is the second MDIChildWnd”, 激活第一个子窗口,保存内容text1.txt;激活第二个子窗口,保存内容text2.txt;

“打开”已有的文件text3.txt,并输入内容保存。察看文件内容的变化。

一、多文档程序的结构:

(1)程序中主要的类:

CmainFrame CchildFrame CEx_mdiView CEx_mdiDoc CEx_mdiApp (2)各类的功能:

CmainFrame 主框架窗口类,负责为视图提供框架(标题、窗口组件等),

同时负责响应标准的窗口消息。

CchildFrame 子窗口类,用于容纳视图和文档。

CEx_mdiView 视图类,负责文档数据的显示和文档数据的修改操作。

CEx_mdiDoc 创建、读写磁盘文件。并更新视图。具体操作:

文档类的函数UpdateAllViews()实现更新所有相关的视图,该函数自动调用OnUpdate()函数对文档进行访问。

CEx_mdiApp 负责一个应用程序对象的创建、初始化、运行、退出和清

理工作。在InitInstance()函数中利用文档模板创建文档。通过修改该

函数,可以让应用程序支持多种类型的文档。

二、窗口特点分析:

(1)应用程序有一个MDI主框架窗口,包含MDI客户区(即MDICLIENT)和菜单、工具栏等控制框口。

(2)MDI客户窗口负责管理主框架窗口的客户区和子窗口的创建。每个主框架窗口仅有一个MDI客户窗口。

(3)每打开一个文档,框架就自动为文档创建一个MDI子窗口。当关闭一个子

窗口时,框架负责删除子窗口。

(4)在任何时刻,最多只有一个子窗口是活动的(窗口标题颜色呈蓝色高亮显示)。即“激活”状态。

(5)主框架窗口的菜单项随子窗口而改变。

Ch6.2 访问当前活动视图和活动文档的方法

在基于文档/视图结构的应用程序中,经常要访问当前活动视图和活动文档。具体

方法总结如下:

一、SDI程序:

主框架窗口就是文档窗口。

1、取得活动视图:

在框架窗口类中:

CmyView* pView;

pView= GetActiveView();

在文档类中:

POSITION pos=GetFirstViewPosition(); //获取第一个视图的位置

pView=GetNextView(&pos);//获取指定位置的视图的指针并将视图位置移至下

//一个位置

2、获取活动文档:

CmyDocument* pDoc;

pDoc= GetDocument(); //在视图类中获得文档指针

二、MDI程序:

1、在主框架类中获得视图对象指针:

在多文档程序中,主框架窗口没有任何关联的视图对象,而是每个子窗口都有

对应的文档和视图对象。因此,要获得活动视图对象指针,必须先获得当前活动

子窗口,然后获得与子窗口相关联的活动视图,即:

CMIDIFrameWnd *pFrame = (CMIDIFrameWnd *)AfxGetApp()->m_pMainWnd;

//获得活动子窗口

CMIDChildWnd *pChild= pFrame->MIDIGetActive();

注:此时,pChild就相当于单文档程序中的主框架窗口的指针,以后的操作

就与单文档基本一样了,比如:

相关文档
最新文档