Office中国论坛/Access中国论坛
标题:
Office2000下内部COM插件的编程实现(之二)
[打印本页]
作者:
sophieqd
时间:
2005-12-4 20:48
标题:
Office2000下内部COM插件的编程实现(之二)
在Office应用程序中,尽管菜单和工具栏按钮看上去不太一样,但实质上它们是相同类型的对象。
CommandBars
集合包含程序中的所有命令条,如:工具条和菜单条。每一个CommandBars集合都有一个CommandBar对象和它对应,
CommandBar
对象可以包含其它的
CommandBar
对象,这些对象是作为按钮或菜单命令来用的。每一个
CommandBar
都将通过
CommandBarControls
对象被引用,
CommandBarControls
又可以包含一组
CommandBarControl
对象。每一个
CommandBarControl
可以包含一个
CommandBar
对象,并可以通过它来存取控件属性。每一个
CommandBarControl
对象,实际是对应
CommandBarControls
中的控件集合。
CommandBarControl
可以有三种表现形式:
l
弹出式(CommandBarPopup)
:相当于菜单条的一个菜单项。
l
组合框(CommandBarComboBox)
:类似于工具条中组合框控件。它包括一个工具栏和紧接着工具栏的一个下拉箭头。单击该按钮,将显示出更多的带图标的菜单命令。
l
按钮(CommandBarButton)
:
相当于标准的工具栏按钮,即带有图标的按钮。
在下面的示例程序中,我们将在Outlook2K中新建一个工具条并在其上添加二个按钮,并且在其菜单“工具”中新建一个菜单条,这些操作都可以在OnConnection接口涵数中完成。
首先
,我们需要在工程中导入Office和Outlook类型库,可以在Stdafx.h文件中加入下面语句(注意:其中路径可根据Office所装路径自行设定):
// 导入工程所需Office2K及Outlook2K类型库
#import "e
rogram FilesMicrosoft OfficeOfficemso9.dll" rename_namespace("Office"), named_guids
using namespace Office;
#import "e
rogram FilesMicrosoft OfficeOfficeMSOUTL9.olb" rename_namespace("Outlook"), raw_interfaces_only, named_guids
using namespace Outlook;
其次
,让我们来在Outlook中新建一个工具条,并且在其上添加两个按钮。
代码如下:
// 装??插件时处理
STDMETHOD(OnConnection)(IDispatch * Application, ext_ConnectMode ConnectMode, IDispatch * AddInInst, SAFEARRAY * * custom)
{
CComPtr < Office::_CommandBars> spCmdBars;
// Outlook应用接口_Application
CComQIPtr <Outlook::_Application> spApp(Application);
ATLASSERT(spApp);
// 获取CommandBars接口
CComPtr<Outlook::_Explorer> spExplorer;
spApp->ActiveExplorer(&spExplorer);
HRESULT hr = spExplorer->get_CommandBars(&spCmdBars);
if(FAILED(hr))
return hr;
ATLASSERT(spCmdBars);
// 新增一个工具条及其上两个位图按钮
CComVariant vName("新增Outlook2K工具条插件");
CComPtr <Office::CommandBar> spNewCmdBar;
// 新增工具条位置
CComVariant vPos(1);
CComVariant vTemp(VARIANT_TRUE); // 临时
CComVariant vEmpty(DISP_E_PARAMNOTFOUND, VT_ERROR);
// 用Add方法在指定位置新增一工具条并让spNewCmdBar指向它
spNewCmdBar = spCmdBars->Add(vName, vPos, vEmpty, vTemp);
// 获取新增工具条的CommandBarControls,从而在其上添加按钮
CComPtr < Office::CommandBarControls> spBarControls;
spBarControls = spNewCmdBar->GetControls();
ATLASSERT(spBarControls);
//MsoControlType::msoControlButton = 1<
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/)
Powered by Discuz! X3.3