OLE项目出入数据表控制方法设计说明书

上传人:汽*** 文档编号:490168647 上传时间:2022-12-10 格式:DOC 页数:21 大小:161.50KB
返回 下载 相关 举报
OLE项目出入数据表控制方法设计说明书_第1页
第1页 / 共21页
OLE项目出入数据表控制方法设计说明书_第2页
第2页 / 共21页
OLE项目出入数据表控制方法设计说明书_第3页
第3页 / 共21页
OLE项目出入数据表控制方法设计说明书_第4页
第4页 / 共21页
OLE项目出入数据表控制方法设计说明书_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《OLE项目出入数据表控制方法设计说明书》由会员分享,可在线阅读,更多相关《OLE项目出入数据表控制方法设计说明书(21页珍藏版)》请在金锄头文库上搜索。

1、OLE项目出入数据表控制方法设计说明书1 需求分析1.1 设计需求随着计算机技术应用的普及,对于文件的管理要求也越来越高 ,因此设计 一个能够管理Word文档和Excel文档文件管理器是非常有必要的。本次课题是设计思想是把一个 Word文档或Excel文档数据写入数据表,或 从数据表把一个 Word或Excel文档读入到应用程序文档;并且在应用程序中嵌 入 Word或Excel应用程序界面。首先进行复合文档操控基本实验,体会OLE(对象与嵌入)项目的使用方法: 插入一个OLE对象,激活OLE对象,提取OLE对象的文档数据。再使用框架客户 区切分方法进行应用程序的界面设计。 将应用程序主框架客户

2、区设计为: 文档类 型视图、数据表视图、OLE项目视图(OLE项目激活窗口)。当文档类型视图确定 一种文档类型后, 存在于数据表中的此类文档行全部罗列于数据表视图的表格控 件中;当双击表格控件的数据行时,从数据表中读取一个OLE项目数据,并在位 激活。所以还要按类型编码、文档编号、文档摘要、文档录入日期、文档数据量 和文档数据创建 Access 数据表。在应用程序的功能设计方面,要求应用程序能 够对文档进行设计新建文档、保存文档、删除文档功能。1.2 设计思路此次课程设计的应用程序界面应该包含有三大视图 : 文档类型视图、数据表 视图、OLE项目视图。如下图所示。1 L 1 R 1*4llfl

3、 閭用=1 N QIEL鼻尊fit据表视图文档类和视图图1-1应用程序界面模式(1) 文档类型视图区设置为一个 CTreeCtrl视图对象(树型视图),把文档类 型分为如下三种:普通文档类(01) : Word文档(01) ; Excel文档(02);技术文档类(02) : Word文档(01) ; Excel文档(02);重要文档类(03) : Word文档(01) ; Excel文档(02);(2) 数据表视图区设置一个CMSFIexGrid模式视图对象,数据项包括:文档 类型码;文档摘要;文档录入时间;文档数据量 /Mo(3) 0LE项目视图区用于显视当前激活的 OLE项服务服务窗口中,

4、在没有OLE 项目激活时为应用程序视图,即 CVckcsj09View类对象。Visual C+程序设计语言中为用户集成了 COleDocume n文档类,此类的作 用为管理和操控其他应用程序的文档,即 COleDocume nt类是复合文档类(容器 文档类),它可以包容 Word Excel等其它应用程序的文档,被容入的文档对象 称为OLE项目。也就是说如果COleDocument类对象包容有 Word或Excel的文档, 那么就可以在其视图中激活其文档对应的服务程序一一调入并运行Word或Excel文档对象所对应的 Word或Excel程序来处理文档。假设我们在 COleDocument类

5、对象中嵌入的OLE项目是一个 Word的文档,就可以在应程序的 视图中激活 Word应用程序来编辑OLE项目数据。如果新建一个OLE项目文档时,当在文档类型视图确定一种文档类型后,会在数据表视图的CMSFlexGrid控件窗口中增加一条数据行记录,并自动确定该文 档的文档编号,然后选择所要创建的文档类型,这样相应的服务程序在应用程序 视图中被激活了,我们也就能通过该应用程序来编辑 OLE项目数据。在保存文档 数据时,从COIeDocument类对象找出当前操作的 OLE项目,使用数据串行化功 能,获得OLE项目的文档数据,将文档数据写入我们指定的介质中。 如果需从存 储介质中读取一个OLE项目

6、文档,仍然是通过 OLE项目的串行化功能读回数据, 并嵌入到应用程序文档中, 同时进行在位激活工作。 为了给文档管理器应用程序 提供一个Word或Excel文档的保存介质,我们使用Access数据表,我们把Word 或 ExceI 应用程序的文档数据写入数据表中, 或从表中把文档数据读入应用程序 的COIeDocument类对象中。1.3 用户操作控制流程当文档类型视图中树型控件选项发生改变, 提取由父项与子项文本前个数字 组成 4 字符的类型码, 将这个类型码发送给数据表视图窗口, 或直接调用数据表 视图的函数, 数据表视图从数据表中找出与类型码一致的所有数据行, 并显示到 数据表视图的 C

7、MSFlexGrid 控件窗口中。当数据表视图的 CMSFlexGrid 控件的行上发生双击事件, 则从数据表中读取 OLE项目文档数据进入应用程序文档, 由于OLE项目视图为CVckcsjO9View类对 象,所以应用程序文档中的OLE项目的服务程序只能在这个视图区域激活。需要保存当前激活的OLE项目时,先将一个OLE项数据数据通过其自身的 Serialize 函数读取数据到共享文件里,然后将共享文件写入数据表中。2功能设计与实现方法2.1总体功能结构图图2-1总体功能结构图2.2应用程序直接读入文档文件运行应用程序之后,鼠标左键单击菜单栏的“文件”选项,然后选择下拉框 中的“打开”选项,然

8、后就可以打开指定路径下的指定的文件,这一功能的完成 是通过在文档类中捕获菜单ID_FILE_OPEN消息,建立其消息响应函数voidCOIeDDoc:OnFileOpen()来实现的,该消息响应函数的实现代码如下所示:void COIeDDoc:O nF ileOpe n()/首先找出视图POSITION pos=GetFirstViewPositio n();CView* pView=NULL;COleDView* pViewObj=NULL;while(pos) pView=GetNextView(pos);if(pView-IsKindOf(RUNTIME_CLASS(COleDView

9、)pViewObj=(COleDView*)pView;break;if(pViewObj=NULL)return;CString DocFileName;CFileDialogfile(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, Word 文档 (*.Doc)|*.Doc|);if(file.DoModal()=IDOK) DocFileName=file.GetPathName();elsereturn;COleDCntrItem* pItem = NULL;TRY/ Create new item connected to

10、 this document.pItem = new COleDCntrItem(this);pltem-CreateFromFile(DocFileName);根据文档文件建立 OLE 项目/如果视图对象的 OLE项目指针不为空,则删除if(pViewObj-m_pSelection)pViewObj-m_pSelection-Close(); pViewObj-m_pSelection-Delete(); delete pViewObj-m_pSelection; pViewObj-m_pSelection=pltem;/激活OLE项目的服务程序 pltem-DoVerb(OLElVERB

11、_SHOW, pViewObj);UpdateAllViews(NULL);/ 更新文档视图CATCH(CException, e)if (pItem != NULL)ASSERT_VALID(pItem); pItem-Delete();AfxMessageBox(IDP_FAILED_TO_CREATE);END_CATCH调试代码无误后, 运行该程序, 当应用程序打开文件时该函数得以调用, 将 确定的文档文件数据作为OLE项目数据。2.3将OLE项目写为文档文件如何将一个确定的 OLE项目保存为一个文档文件呢,我们可以从视图类(COIeDVieW On Draw函 数中的代码if (m_

12、pSelection = NULL)POSITION pos = pDoc-GetStartPosition();m_pSeIection=(COIeDCntrItem*)pDoc-GetNextCIientItem(pos);可以看出:复合文档部使用了一个链表 (m_pSeIection) 来管理应用程序插入 的所有COIeClientltem 类对象(OLE项目),每一个OLE项目对象的数据格式为: OLE项目信息头(22Byte)+项目文档。将OLE项目直接写为文档文件就需要丢 掉OLE项目信息头,只保存项目文档即可,但是当OLE项目数据写入文件时必须 知道数据的长度, 不知道数据长度是

13、没有有办法写入文件的。 该程序中运用了存 共享文件与二进制数据流串行化的操作方法,先将一个OLE项数据数据通过其自身的 Serialize 函数写入一个共享文件, 共享文件使用全局存, 并自动申请占用 存的大小,然后获取共享文件的长度,从共享文件的长度中减去 22字节的偏移量,就是纯文档数据。 这一功能的具体实现过程是, 在应用程序的文档 COleDDoc类中捕获ID_FILE_SAVE_AS菜单消息,然后在它的消息响应函数中添加代码如下:void COleDDoc:OnFileSaveAs()/ 首先找出视图POSITION pos=GetFirstViewPosition();CView*

14、 pView=NULL;COleDView* pViewObj=NULL;while(pos)pView=GetNextView(pos);if(pView-IsKindOf(RUNTIME_CLASS(COleDView)pViewObj=(COleDView*)pView;break;if(pViewObj=NULL|pViewObj-m_pSelection=NULL)return;CString FileName=E:TestChen.Doc;CFileDialog file(FALSE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,

15、 Word 文档 (*.Doc)|*.Doc|);if(file.DoModal()=IDOK)FileName=file.GetPathName();elsereturn;/ 设置共享文件对象 , 存共享 , 数据可移动 , 数据增长量 8 字节CSharedFile SharedFile(GMEM_DDESHARE|GMEM_MOVEABLE,8);/设置CArchive对象ar,目的是获 OLE项目数据CArchive ar(&SharedFile,CArchive:store);pViewObj-m_pSelection-Serialize(ar);/ar 与共享文件分离ar.Flush();ar.Close();if(SharedFile.GetLength()0)/ 获取共享文件的存句柄HGLOBAL m_hGlobalMemory=SharedFile.Detach();/ 锁定全局存句柄 , 获取句柄对应的存地址LPVOID lpBuf = :

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号