应用程序中插入OLE对象的方法_第1页
应用程序中插入OLE对象的方法_第2页
应用程序中插入OLE对象的方法_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第 5 卷第 35 期 (2009 年 12 月) computer knowledge and technology 电脑知识与技术e-mail: tel:+86-551-5690963 5690964issn 1009-3044computer knowledge and technology 电脑知识与技术vol.5,no.35, december 2009, pp. 9967-9968,9983应用程序中插入 ole 对象的方法陈家红(金陵科技学院 信息技术学院,江苏 南京 211169)摘要:该文介绍了在应用程序

2、中使用 ole 技术来来插入 ole 对象的两种方法,第一种方法是使用微软的 ole 容器控件,第二种方 法介绍了在不能使用 ole 容器控件的时候,如何通过调用 api 函数插入 ole 对象。关键词:ole;api;richtextbox中图分类号:tp311文献标识码:a文章编号:1009-3044(2009)35-9967-02the methods of insert ole object into windows applicationchen jia-hong(jinling institute of technology, nanjing 211169, china)abstr

3、act: this article shows how you can insert ole objects into a richtextbox control by using the ole way, the first method is to use microsofts ole container control, the second method describes that how we can call the windows api function to inserting ole objects when we cannot use ole container con

4、trol.key words: ole; api; richtextbox1 基于 ole 容器控件实现插入 ole 对象object linking and embedding,对象连接与嵌入,简称 ole 技术。 ole 是在客 户应用程序间传输和共享信息的一组综合标准。 ole 基于组件对象模型 (com) 并允许开发可在多个应用程序间互操作的可复用即插即用对象。 在 visual basic6.0 中,提供了一个 ole 容器的功能,允许在用户的应用程序嵌入公式、word、ex-cel 等 ole 对象。 大大提高了应用程序的功能。 类似于 windows 操作系统自带的图 1 插入各

5、种 ole 对象写字板,写字板程序有一个重要的功能就是在文档中嵌入各种 rtf(丰富格式文本)。 如图 1 所示。如果想要在自己的应用程序中实现这种功能,就要使用 richtextbox 控件和ole 容器功能。 下边首先阐述在 visual basic6.0 中如何实现。在 visual basic 6.0 中要实现 rtf 的功能, 主要有两种方法, 第一种是使用 richtextbox 控件结合 ole 容器的功能, 此种方法实现起来方便简单 , 但只能使 用在基于 windows 的窗体应用程序中,在 activex 控件等技术中都不能使用,限制 了此种方法的应用。第一种方法的实现:首

6、先在 vb 中建立一个标准的 windows 应用程序,向窗体上添加 ole 容器控 件和 richtextbox 控件,其中的 richtextbox 控件不是标准的控件,需要通过在控 件工具箱点击右键选择【部件】选项,如图 2 所示。选中其中的 microsoft rich texbox control 6.0,这样在控件工具箱中就多了一图 2 部件选择卡个 richtextbox 控件。 如图所示:件,第二个就是 richtextbox 控件。,其中第一个是 ole 容器控在窗体上加入这两个控件 , 在加入一个命令按 钮 , 最 终 的 界 面 如图 3 所示。此程序中, 我们只是利用

7、ole 容器控件做中介 , 并不是直接把 ole 对象显示在 ole 容器中,而是显示在 richtextbox 控件中,所以, 需要设置 ole 容器对象的 visible 属性为 false, 这样在程序运行起来 之后就看不到 ole 容器控件了。 下边讲解如何实现把 ole 对象插入 richtextbox 控件。 为命令按钮 command1 编写代码:private sub command1_click()ole1.insertobjdlg 通过 ole 容器控件调用插入对象对话框,显图 3应用程序界面收稿日期:2009-09-19示各种可以插入的对象if ole1.class th

8、en 如果用户选择了插入某种对象richtextbox1.oleobjects.add , , , ole1.class 把此对象插入 richtextbox 控 件中end ifend sub程序运行时,用户点击按钮,将会打开插入对象对话框,如图 4 所示。如果用户选择插入公式,就会自动打开公式编辑器,让用户编辑公式,编辑完成后 自动插入到 richtextbox 控件中,如图 5 所示。由以上的介绍可以看出,使用第一种方法插入 ole 对象的方法是简单快捷的。 但这种方法只能用于能使用 ole 容器控件的窗体应用程序中。 在其他类型的应用程序 中无法使用,例如在 activex 控件中就不

9、能使用 ole 控件容器。2 使用 api 函数实现 ole 对象的插入第二种方法的是使用 richtextbox 控件,结合 windows api 技术,直接在应用程序 中调用 windows api 实现在 richtextbox 控件中插入各种各样的 ole 对象, 从而实现 丰富格式文本的功能。下边介绍第二种实现向 richtextbox 控件中插入 ole 对象的方法,本方法的核心 是使用 windows api 函数的方法。 本文将以一个支持 rtf 功能的 activex 控件的实现 为例,讲解如何不通过 ole 容器控件实现丰富格式文本,如图 6 所示。首先,为了在程序中使用

10、 ole 技术,首先要引入相应的 api 函数。图 4插入对象对话框图 5 使用 ole 容器控件插入对象实例第一个要引入的 api 是显示插入对象对话框的 api,api,用来显示插入对象的对话框:这是此程序中主要的一个private declare function oleuiinsertobject lib oledlg.dll _alias oleuiinsertobjecta (inparam as any) as long其次,还要引入其它的一些 api,要引入的 api 介绍如下:此 api 的功能是根据 class id 得到 com 对象的 progid, 此 api 需要从

11、 vb 传递lpolestr * 参数:private declare function progidfromclsid lib ole32.dll (clsid as any, straddessas long) as long用此 api 来为 ole 方式分配的内存用 ole 方式释放:private declare sub cotaskmemfree lib ole32.dll (byval pvoid as long)用此 api 将一块内存的数据从一个位置复制到另一个位置:图 6 使用 api 函数插入对象private declare sub copymemory lib ker

12、nel32 alias rtlmovememory (destination as any, source as any, byval length aslong)用此 api 返回 unicode 编码字符串的长度(不包括字符串结束标志):private declare function lstrlenw lib kernel32 (byval lpstring as long) as long的常量。 其它功能的核心代码如下:public sub insertoleobject()dim uiinsertobj as oleuiinsertobjecttypedim retvalue as

13、 long dim lpolestr as long dim strsize as long dim progid as stringuiinsertobj.cbstruct = lenb(uiinsertobj)uiinsertobj.dwflags = iof_selectcreatenew uiinsertobj.hwndowner = 0uiinsertobj.lpszfile = string(256, )uiinsertobj.cchfile = len(uiinsertobj.lpszfile)retvalue = oleuiinsertobject(uiinsertobj) i

14、f (retvalue = oleui_ok) thenif (uiinsertobj.dwflags and iof_selectcreatenew) = _iof_selectcreatenew) thenretvalue = progidfromclsid(uiinsertobj.clsid, lpolestr)strsize = lstrlenw(lpolestr) + 1progid = string(strsize, 0)copymemory byval strptr(progid), byval lpolestr, strsize * 2cotaskmemfree lpolest

15、roleuiinsertobjecttype 中的 dwflags 使用(下转第 9983 页)第 5 卷第 35 期 (2009 年 12 月)computer knowledge and technology 电脑知识与技术第一种关系:指针作为函数的参数,可用于传递变量的地址或数组的首地址。 此时,我们将实参指针值单向传递给形参变量,则实参和形参指向同一个空间,调用函数可以改变该空间的内容。 若传递的是数组的首地址则可以改变实参数组中元素的值。 另外, 普通函数调用只可以得到一个返回值(即函数值),而运用指针变量作为函数参数可以通过一次函数的调用改变多个变量的值,如果 不用指针是难以做到这

16、一点的。第二种关系:函数的返回值是指针。 定义方式:数据类型 * 函数名(参数列表)函数体 第三种关系:指向函数的指针变量。 定义方式:数据类型 ( * 指针变量名)(参数列表) 要注意区分上述两种情况。4 指向指针的指针变量指针变量既然是变量,当然也会有自己的内存地址,当然也就可以被别的指针变量所指向了,此时别的指针变量就是指向指针 的指针变量(二级指针)。指向指针的指针变量的定义格式:基类型 指针变量名;如 int *p;这种用法主要是为了在函数中改变指针实参和应用于多个字符串构成的二维字符数组。如: void pad(int *pp)( *pp)+;int a5=1,2,3,4,5,*p

17、;p=a;pad(p);p 的值被改变,指向下一个元素 2,因为 pado 中的 pp 指向 p,*pp 即为 p,(*pp)+即为 p+。 它们的指向关系为:图 1指针是 c 语言中重要的概念,是 c 的一个特色利用它可以编写出颇有特色的、质量优良的程序,实现许多其他高级语言难以实 现的功能。 但指针的使用太灵活,也十分容易出错,因此使用指针时要十分小心,并且在编程过程中不断掌握指针的使用技巧,通过 实践中的不断摸索才能准确无误地驾驭指针,读者应该多多思考,多多上机操作,体会其中的奥妙。参考文献:1 谭浩强.c 程序设计m.北京:清华大学出版社,1999.2 王声决,罗坚.c 语言程序设计m

18、.北京:中国铁道出版社,2002. 3 王建平.c 语言程序设计m.北京:中国水利水电出版社,2001.4 林东.编程语言基础 c 语言m.2 版.北京:高等教育出版社,2006.(上接第 9968 页)richtextbox1.oleobjects.add , , , progidelserichtextbox1.oleobjects.add , , uiinsertobj.lpszfileend ifend if exit sub end sub插入图片的函数代码:private sub minspic_click()commondialog1.filter = 所 有 图 形 文 件|*.bmp;*.dib;*.bmp;*.gif;*.gif;*.jpg;*.jpeg;*.jpg;*.jpeg;*.jpe;*.jpe|bmp(*.bmp;*.dib)|*. bmp;*.dib|gif(*.gif;*.gif)|*.gif;*.gif|jpg (*.jpg;*.jpeg;*.jpg;*.jpeg)|*.jpg;*.jpeg;*.jpg;*.jpegcom

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论