您的位置:逆风者 VC++ 正文
 添加时间:2007-09-01 原文发表:2007-08-31 人气:51 来源:vckbase.com

本文章共7206字,分4页,当前第1页,快速翻页:
 

使用VC ATL实现Office的COM插件

作者:useresu

下载源代码
逆风编程精品

摘要
  本文介绍了一种使用VC ATL(Active Template Library),利用IDTExtensibility2接口,为Microsoft Word加入功能简单的COM插件(addin),加入工具栏按钮和菜单等可视部件,并为其加入响应事件的方法,并在最后简单说明了实现与Office宏混合编程的方法。
   说到Office相关的编程,大家首先想到的可能是VBA(Visual Basic for Application),事实上, ATL也是一种很好的工具。这里介绍的就是一种基于ATL的Office编程方法,实现的功能很简单,仅仅是一个示例,步骤如下:

1、在visual C 编程环境下,利用向导生成一个名为WordAddin的ATL COM Appwizard工程:
  在向导的第一个对话框中server type单选框选择默认的服务器类型Dynamic Link Library(DLL),下面的三个复选框中选择Allow merging of proxy-stub code选项。然后单击Finish,这样一个空的ATL project就产生了(如图 一)。


图一

2、插入我们的ATL object:
  选择菜单Insert—>Insert new ATL object,出现new ATL object向导对话框,左边的category列表中选择object,右边相应的选择simple object,单击下一步(Next)(如图 二):


图二

在第二个对话框names属性页的“Short Name:”中填入Addin(如图三):


图三

在Attribute属性页中,选中Support IsupportErrorInfo复选框,单击OK(如图四):


图四

这样就产生了一个类名为WordAddin的ATL COM object,编译(build)该工程看是否一切正常。

2、用IDTExtensibility2实现CAddin类:
   IDTExtensibility2是定义在MSADDin Designer typelibrary(MSADDNDR.dll/MSADDNDR.tlb)中的库文件,该文件一般在C:\Program Files/Common Files/Designer目录下。IDTExtensibility2 库提供了 5 个可用来操纵插件以及宿主应用程序的事件: OnConnection、OnDisconnection、OnAddInsUpdate、OnStartupComplete 和 OnBeginShutdown。这些事件的具体功能和用法可查阅MSDN。用向导来实现IDTExtensibility2接口:切换到classview页,右键点击Caddin类,在弹出的菜单中选择Implement Interface,出现Implement Interface对话框,选择Add Tylpelib按钮(如图 五):


图五

(单击OK,)在出现的Browse Typelibraries对话框中选择Microsoft Add-in Designer(1.0) (如图六):


图六

单击OK,在AddinDesignerObjects属性页中选择IDTExtensibility2(如图七):


图七

   再单击OK。这样向导就在ATL COM object中添加了IDTExtensibility2的5个具体事件,并对他们进行了一些默认的初始设置,同时还更新了COM_INTERFACE_MAP()。

4、注册插件到它的宿主程序:
   打开文件视图FileView—>Resource File中的Addin.rgs文件,加入以下代码:

HKCU

{

  Software

  {

    Microsoft

    {

      Office

      {

        Word

        {

          Addins

          {

            ''WordAddin.Addin''

            {

              val FriendlyName = s ''WORD Custom Addin''

              val Description = s ''Word Custom Addin''

              val LoadBehavior = d ''00000003''

              val CommandLineSafe = d ''00000001''

            }

          }

        }

      }

    }

  }

}

5、重新编译(build)该工程注册我们的插件。
 
本文章更多内容1 - 2 - 3 - 4 - 下一页>>
相关文章

函数功能流程图,in as,line feed
Javascript - Prototype Based Language
ResizeParentToFit,destructors及其他
如何去掉浮动工具条中的“关闭”按钮
自己写 FILTER 改变画面颜色
static_cast<>揭密
对C#中的TreeView加背景图
如何在 Windows NT、Windows 2000 和 Windo
用VC 创建自定义向导程序
IE 控件一些高级使用方法
VC实现波形不闪烁动态绘图
封装ADO之MFC应用
如何利用Xerces C 正确处理XML文档中的中文
几个数字信号处理算法程序
HLA学习笔记(1)
在MFC中应用CTreeCtrl控件的技巧
用原始套接字实现网络监听
多文件的合并与分解
也谈 QQ 安全
使用三态树实现多目录选择

相关评论


本文章所属分类:首页 VC++

  热门关键字: