编译:徐景周
下载本文示例源代码
简介
Office2000/XP中Word下的内部COM插件的实现方法和前面我的文章《 Office2000下内部COM插件的编程实现》中介绍的示例Outlook2000下内部COM插件的实现方法与步骤基本相同,在这里,我想不用再重复哆嗦大部分前面文章里已经讲过的内容了,只将重点放在它们间实现的不同点上,有兴趣的朋友可以参看前面这篇文章,然后再看这篇文章一定会事半功倍的。本文章提供的Word内部COM插件示例源码运行后的效果图如下所示:
具体实现
下面,让我们来看看它们间(Word2000 vs Outlook2000内部COM插件)的实现内容到底有什么不同呢?可以先建一个ATL工程,起名WordAddin,再插入一个简单对象,起名IWord2000Addin,其它步骤可参看前面我讲的文章中介绍的内容进行操作。在这里,除了下面介绍的源码内容需要改动处,其它部分的源码内容基本上和前面我讲的文章中的示例源码相同,一般并不需要改动(除非你有其它方面的特殊需求)。
第一点:在文件中Stdafx.h中的类型的导入部分源码将有所不同,可将源文件中源码替换为下面部分既可。
// 导入工程所需Office2K及Word2K类型库(路径可根据安装路径自行设定), jingzhou xu
/* Office XP下导入如下: */
//#import "C:\Program Files\\Common Files\\Microsoft Shared\\Office10\\MSO.DLL" rename_namespace("Office")
//using namespace Office;
//#import "D:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.olb" rename_namespace("VBE6")
//using namespace VBE6;
//#import "D:\Program Files\Microsoft Office\Office10\MSWORD.olb" rename("ExitWindows","ExitWindowsEx"),
//named_guids,rename_namespace("MSWord")
//using namespace MSWord;
/* Office 2000下导入使用 */
#import "E:\\Program Files\\Microsoft Office\\Office\\mso9.dll" rename_namespace("Office")
using namespace Office;
#import "D:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.olb" rename_namespace("VBE6")
using namespace VBE6;
#import "E:\\Program Files\\Microsoft Office\\Office\\MSWORD9.olb" rename("ExitWindows","ExitWindowsEx"),
named_guids,rename_namespace("MSWord")
using namespace MSWord;
第二点:注册类型信息有所不同(*.rgs),如将文件Word2000Addin.rgs中内容的下半部分修改如下所示:
HKCU
{
Software
{
Microsoft
{
Office
{
Word
{
Addins
{
''WordAddin.Word2000Addin''
{
val FriendlyName = s ''Word2000 Addin''
val Description = s ''Word2000 Addin''
val LoadBehavior = d ''00000003''
val CommandLineSafe = d ''00000001''
}
}
}
}
}
}
}
第三点:Word2000/XP中没有ActiveExplorer对象,所以可以不再经过它,直接从_Application中获得CommandBars对象进行操作。修改部分如下面源码所示:
// 装缷插件时处理
STDMETHOD(OnConnection)(IDispatch * Application,
ext_ConnectMode ConnectMode,
IDispatch * AddInInst,
SAFEARRAY * * custom)
{
CComPtr < Office::_CommandBars> spCmdBars;
// Word应用接口_Application
CComQIPtr<MSWord::_Application> spApp(Application);
ATLASSERT(spApp);
// 获取CommandBars接口
HRESULT hr = spApp->get_CommandBars(&spCmdBars);
if(FAILED(hr))
return hr;
ATLASSERT(spCmdBars);
......
......
}
好了,Word2000/XP下和Outlook2000下的内部COM插件实现的不同点主要就这些了,具体实现的详细代码可参看两篇文章所附带示例源码,内有详细注释。
最后,我想再补充一点的是,由于Office97及其以下版本不支持内部COM插件接口(特别是IDTExtensibility2接口),所以以上程序在Word97中并不适用。为了能在Word97下也能用,我们可以采用另一种方法:既VBA+ATL插件来实现.在用ATL编程时由于没有IDTExtensibility2接口支持,所以不能再用OnConnection()和OnDisconnection接口涵数来实现在装载插件和卸载插件时的操作。我们可以在在工程中创建两个接口涵数,如名为:Init()和Uninit(),把它们当做上面所提到的两个装载、卸载接口涵数,可以在Init()中加入实现插入工具条按钮部分,代码大致和本文示例相同,Uninit()中实现取消操作。然后可以建一Word模板(*.dot),在其中插入VBA来实现创建并加载、卸载组件的方法,如下面VBA源码:
Dim o as Application
Dim obj as Object
Sub AutoExec()
Set obj = CreateObject("Word97Addin.Addin")
Set o = ThisDocument.Application
obj.Init o
End Sub
Sub AutoExit()
Set o = ThisDocument.Application
obj.Uninit o
Set obj = Nothing
Set o = Nothing
End Sub
由于这些并不是本篇文章的重点(重点是实现Word2000/XP下内部COM插件),所以,在这里我就不必再详细讨论了,有兴趣的读者可以参考其它相关资料。
参考文献:
Office2000下内部COM插件的编程实现 -- 徐景周(译者)
Writing an MS Word addin -- Amit Dey
ATL开发指南(第二版) -- Tom Armstrong & Ron Patton
分享到:
相关推荐
使用ATL开发Word2000/XP中内部COM插件的编程实现,可以在Word中插入新的工具条按钮并响应其操作。 未来工作室(Future Studio)
总的来说,"Word2000&XP中内部COM插件的编程实现"这个主题涵盖了C++ COM编程的基础知识,包括COM组件的设计、实现、注册和使用。通过深入学习和实践,开发者能够掌握创建高效、稳定的Word插件的技能,进一步提升Word...
8. **源码分析**:"Word2000&XP中内部COM插件的编程实现.doc"可能是文档教程,详细解释了整个过程和技巧。"WordAddin.zip"则包含实际的源代码,你可以研究其中的实现细节,了解如何将理论知识应用到实践中。 通过...
在提供的压缩包文件中,"Word2000&XP中内部COM插件的编程实现.doc"可能是包含详细步骤和示例代码的文档;"www.pudn.com.txt"可能是来源或下载链接的说明;而"WordAddin.zip"则可能是一个已编译好的Word COM插件示例...
### Office插件编程详解 #### 一、概述 在当今的工作环境中,Microsoft Office 套件几乎是必不可少的工具。为了更好地满足用户需求并提供定制化的功能,开发人员可以通过编写插件来扩展Office软件的功能。本篇文章...
例如,`Word2000&XP中内部COM插件的编程实现.doc`和`Word2000_XP中内部COM插件的编程实现 - Visual C++ - 编程开发 - 破釜沉舟_ 为网站站长.设计师.编程开发者. 提供资源!.mht`文件可能详细介绍了如何利用C++和COM...
Office百宝箱全家福系列,为中汛软件科技公司(梁瑞春)荣誉出品,现有: Excel万能百宝箱、Word百宝箱、PowerPoint百宝箱、Outlook百宝箱、Publisher百宝箱、Access百宝箱、VBA百宝箱、WPS百宝箱、Office编程百宝箱、...
2. **Word 2000/2002/XP**:增加了多重剪贴板功能,优化了用户界面,减少了Office助手的干扰,引入了任务窗格,提升了工作效率。 3. **Word 2001/2003/2004**:针对Mac OS X进行了本地化支持,修复了安全漏洞,加强...
在WordXP中巧输分数** - 输入分数数值,如`1/2`; - 按下`Ctrl + Shift + =`,Word会自动将其转换为分数形式。 **14. 快速输入大写数字** - 使用快捷键`Shift + 4`(数字键区上的`$`符号键)输入货币符号,随后...
在WordXP中巧输分数** 使用“插入”→“符号”→“分数”功能,选择合适的分数形式。 **14. 快速输入大写数字** - 使用“Shift+数字”键输入大写字母。 - 也可以使用“插入”→“符号”功能选择大写数字。 **15...
在WordXP中巧输分数** - 输入数字后按空格键,再输入斜杠,最后输入分母数字。 **14. 快速输入大写数字** - 使用大写转换功能或直接使用Shift+数字键。 **15. 在Word文档中插入MP3文件** - 通过插入对象的方式...
这些语言各有特点,可以满足不同的编程需求,例如梯形图适合直观的逻辑控制,而结构化文本类似于高级编程语言,适合复杂的数据处理和算法实现。MULTIPROG Express还包含了一些增强的功能,如: - 工程管理器,带有库...
【口语式编辑器】口语式编辑器可以在CKRule内部及客户规则池中被调用,正如其名,其语法与口语表达基本相同。 与标准编辑器相比,口语式编辑器有大量的提示,这使规则编写变得非常容易,会使用Word就会使用口语式...
另外支持OfficeXP和Office2003中Excel的打印预览。 23 轻量级 使用C语言直接开发COM接口,简洁高效,对内核函数的直接调用使得无需其它动态链接库的支持,兼容性极好! 24 在下载和上载Office文档时不会产生临时...
这是一个涉及组件编程、接口设计和注册表编辑的过程,旨在扩展Outlook的功能。 首先,我们需要启动Delphi 2010,并新建一个ActiveX Library项目。这可以通过File -> New -> Other...,然后选择Activex Library来...
控件采用标准HTTP协议,支持任意后台Web服务器(IIS,WebLogic, WebSphere,Apache,Tomcat等),任意后台操作系统(Windows 2000/2003/XP,Linux, Unix等),以及任意后台编程语言(Asp, Jsp, Php,VB...
它们是 Windows NT/2000/XP 的版本和 Windows 95/98/Me 的版本。公开的EmEditor虽然同时装有两个版本的程序,但在安装过程中安装程序自动检出操作系统的版本,只将最合适的版本复制到执行程序中。正因为向着最优化的...
其设计的核心理念是将办公软件的用户体验引入到基础文本编辑器中,让用户在处理文本时也能感受到类似于Word的便捷操作。 首先,这款记事本的界面设计十分出色。它采用了Office XP的经典配色和布局,使得整体视觉...
◆完全支持 Unicode 系统 (NT/2000/XP/2003/Vista/7) 上的 Unicode 字符串; ◆支持 Unicode 代码页 (UTF-8, UTF-16LE, UTF-16BE, UTF-32LE, UTF-32BE); ◆支持系统上已经安装的任何代码页; ◆支持 DOS/Windows、...