使用VC ATL实现Office的COM插件(2)
2008-02-23 05:34:37来源:互联网 阅读 ()
打开文档视图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)该工程注册我们的插件。
6、运行,选择Executable File为word 2000,注意要选择正确的路径,假如运行成功,则插件已加入到word中。
7、给插件添加菜单和按钮:
这里简单的介绍一下Office 的命令条:在Office中,菜单栏、工具栏和弹出式菜单都叫做命令条(Command Bar对象)。任何这些种类的命令条中都能够包括其他命令条和不限数量的控件,如相对工具栏这个命令条而言,按钮就是他的控件。有的控件(如菜单)本身又是命令条,能够多级嵌套。任何的命令条可用一个CommandBars集合控制。CommandBars集合是个通用的可共享且可编程的对象,通过他的Add()方法能够为其添加一个CommandBar 对象(即命令条),而每个 CommandBar 对象都有一个CommandBarControls 集合,这个集合里包含了这个命令条里的任何控件。使用 CommandBar 对象的 Controls 属性可引用命令条中的控件。
现在给word加入一个工具条及其按钮和一个菜单:
首先在工程中加入office和Word的类型库,在stdafx.h文档中加入以下代码:
#import "C:\Program Files\Microsoft Office\Office\mso9.dll" \ rename_namespace("Office") named_guids using namespace Office; #import "C:\Program Files\Microsoft Office\Office\MSOUTL9.olb" rename_namespace("Word"), raw_interfaces_only, named_guids using namespace Outlook; |
注意:一定要把路径改为和office的安装路径一致。
在Word对象模型中,Application对象是代表整个工程的最高级对象,我们能够用他的GetCommandBars方法得到CommandBars对象,由于CommandBars对象是Word任何工具条和菜单项的集合,所以就能够通过调用他的Add方法添加新的工具条。然后为工具条添加新的按钮,其实方法相同简单,我们能够调用CommandBar的GetControls方法得到工具条的CommandBarControls集合,如前所说,CommandBarControls集合是该工具条任何控件的集合,按钮自然是其中之一,那么接下来我们就能够通过调用CommandBarControls集合的Add方法添加一个新的按钮了。下面是具体的实现代码:
CComQIPtr<_Application> spApp(Application); ATLASSERT(spApp); m_spApp = spApp; HRESULT hr = AppEvents::DispEventAdvise(m_spApp); if(FAILED(hr)) return hr; CComPtr <Office::_CommandBars> spCmdBars; CComPtr <Office::CommandBar> spCmdBar; hr = m_spApp->get_CommandBars(&spCmdBars); if(FAILED(hr)) return hr; ATLASSERT(spCmdBars); // now we add a new toolband to Word // to which we''ll add 2 buttons CComVariant vName("WordAddin"); CComPtr spNewCmdBar; // position it below all toolbands //MsoBarPosition::msoBarTop = 1 CComVariant vPos(1); CComVariant vTemp(VARIANT_TRUE); // menu is temporary CComVariant vEmpty(DISP_E_PARAMNOTFOUND, VT_ERROR); //Add a new toolband through Add method // vMenuTemp holds an unspecified parameter //spNewCmdBar points to the newly created toolband spNewCmdBar = spCmdBars->Add(vName, vPos, vEmpty, vTemp); //now get the toolband''s CommandBarControls CComPtr < Office::CommandBarControls> spBarControls; spBarControls = spNewCmdBar->GetControls(); ATLASSERT(spBarControls); //MsoControlType::msoControlButton = 1 CComVariant vToolBarType(1); //show the toolbar? CComVariant vShow(VARIANT_TRUE); CComPtr <Office::CommandBarControl> spNewBar; CComPtr <Office::CommandBarControl> spNewBar2; // add first button spNewBar = spBarControls->Add(vToolBarType,vEmpty,vEmpty,vEmpty,vShow); ATLASSERT(spNewBar); // add 2nd button spNewBar2 = spBarControls->Add(vToolBarType,vEmpty,vEmpty,vEmpty,vShow); ATLASSERT(spNewBar2); _bstr_t bstrNewCaption(OLESTR("Item1")); _bstr_t bstrTipText(OLESTR("Tooltip for Item1")); // get CommandBarButton interface for each toolbar button // so we can specify button styles and stuff // each button displays a bitmap and caption next to it CComQIPtr < Office::_CommandBarButton> spCmdButton(spNewBar); CComQIPtr < Office::_CommandBarButton> spCmdButton2(spNewBar2); ATLASSERT(spCmdButton); m_spButton = spCmdButton; ATLASSERT(spCmdButton2); // to set a bitmap to a button, load a 32x32 bitmap // and copy it to clipboard. Call CommandBarButton''s PasteFace() // to copy the bitmap to the button face. to use // Word''s set of predefined bitmap, set button''s FaceId to //the // button whose bitmap you want to use HBITMAP hBmp =(HBITMAP)::LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDB_BITMAP1),IMAGE_BITMAP,0,0,LR_LOADMAP3DCOLORS); 标签: 版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
相关文章
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设 网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源 网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它 服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护 软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash 热门词条
最新资讯
热门关注
热门标签
|