在word里做一个插件:需要在word里菜单里加入一个自定义的主菜单(如在菜单"格式"和"工具"之间添加一个"我的word"菜单),然后在自菜单里再添加一些子菜单.
我的Addin代码如下,但就是菜单不出来.
急呀!!!!!!!!!!!!!!!!!!!!!!!!!!!
STDMETHOD(OnConnection)(IDispatch * Application, ext_ConnectMode ConnectMode, IDispatch * AddInInst, SAFEARRAY * * custom)
{
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;
CComPtr < Office::CommandBarControls> spCmdCtrls;
CComPtr < Office::CommandBarControls> spNewCmdCtrls; Hr = m_spApp->get_CommandBars(&spCmdBars);
if (FAILED(Hr)) return Hr;
ATLASSERT(spCmdBars);
CComVariant vName("NewMenu");
CComVariant vPos(9);
CComVariant vTemp(VARIANT_FALSE);
CComVariant vType(msoControlPopup);
CComVariant vMenuEmpty(DISP_E_PARAMNOTFOUND, VT_ERROR); // Get CommandBar that is Word's Main Menu
Hr = spCmdBars->get_ActiveMenuBar(&spCmdBar);
if (FAILED(Hr)) return Hr;
spCmdCtrls = spCmdBar->GetControls();
ATLASSERT(spCmdCtrls);
IDispatchPtr spDip;
spDip = spCmdCtrls->Add(vType,vMenuEmpty,vName,vPos,vTemp);
CComQIPtr < Office::CommandBarPopup> spCmdCtrl(spDip);// spCmdCtrl->put_Caption("");
// spCmdCtrl->put_Enabled(VARIANT_TRUE);
// spCmdCtrl->put_Visible(VARIANT_TRUE); spNewCmdCtrls = spCmdCtrl->GetControls();
CComPtr < Office::CommandBarControl> spNewMenu; CComVariant vMenuType(1); // type of control - menu
CComVariant vMenuPos(1);
// CComVariant vMenuShow(VARIANT_TRUE); // menu should be visible
CComVariant vMenuTemp(VARIANT_TRUE); // menu is temporary spNewMenu = spNewCmdCtrls->Add(vMenuType,vMenuEmpty,vMenuEmpty,vMenuPos,vMenuTemp);
_bstr_t bstrName(OLESTR("One"));
spNewMenu->put_Caption(bstrName);
spNewMenu->put_Enabled(VARIANT_TRUE);
spNewMenu->put_Visible(VARIANT_TRUE);
return E_NOTIMPL;
}
我的Addin代码如下,但就是菜单不出来.
急呀!!!!!!!!!!!!!!!!!!!!!!!!!!!
STDMETHOD(OnConnection)(IDispatch * Application, ext_ConnectMode ConnectMode, IDispatch * AddInInst, SAFEARRAY * * custom)
{
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;
CComPtr < Office::CommandBarControls> spCmdCtrls;
CComPtr < Office::CommandBarControls> spNewCmdCtrls; Hr = m_spApp->get_CommandBars(&spCmdBars);
if (FAILED(Hr)) return Hr;
ATLASSERT(spCmdBars);
CComVariant vName("NewMenu");
CComVariant vPos(9);
CComVariant vTemp(VARIANT_FALSE);
CComVariant vType(msoControlPopup);
CComVariant vMenuEmpty(DISP_E_PARAMNOTFOUND, VT_ERROR); // Get CommandBar that is Word's Main Menu
Hr = spCmdBars->get_ActiveMenuBar(&spCmdBar);
if (FAILED(Hr)) return Hr;
spCmdCtrls = spCmdBar->GetControls();
ATLASSERT(spCmdCtrls);
IDispatchPtr spDip;
spDip = spCmdCtrls->Add(vType,vMenuEmpty,vName,vPos,vTemp);
CComQIPtr < Office::CommandBarPopup> spCmdCtrl(spDip);// spCmdCtrl->put_Caption("");
// spCmdCtrl->put_Enabled(VARIANT_TRUE);
// spCmdCtrl->put_Visible(VARIANT_TRUE); spNewCmdCtrls = spCmdCtrl->GetControls();
CComPtr < Office::CommandBarControl> spNewMenu; CComVariant vMenuType(1); // type of control - menu
CComVariant vMenuPos(1);
// CComVariant vMenuShow(VARIANT_TRUE); // menu should be visible
CComVariant vMenuTemp(VARIANT_TRUE); // menu is temporary spNewMenu = spNewCmdCtrls->Add(vMenuType,vMenuEmpty,vMenuEmpty,vMenuPos,vMenuTemp);
_bstr_t bstrName(OLESTR("One"));
spNewMenu->put_Caption(bstrName);
spNewMenu->put_Enabled(VARIANT_TRUE);
spNewMenu->put_Visible(VARIANT_TRUE);
return E_NOTIMPL;
}
解决方案 »
- VC/MFC交流群 87542964 诚意邀请您的加入
- 0x8007000EL最后的L什么意思?Little Endian?
- guest用户如何禁止用户使用任务管理器杀本进程?
- MFC画面程序里启动进程SSH,使用管道,SSH运行不正常。
- 我想让自己的浏览器下拉显示访问过的地址,请问怎么做?
- 怎么 STD::string 这么不好用????
- 怎样调用winsock.h文件
- 如何实现按下“停止”按钮,“播放”变灰,反过来同样成立
- 怎样把cstring类型的值转换成为byte型的!!!
- Auto CAD2010二次开发
- 双核调用的问题----急
- 关于隐藏对话框程序在任务栏上的按钮的问题,请进...
另外一个问题就是不知道为什么我每次打开Word都加载一个菜单(重复加载)
最好给一个例子(有多个子菜单和子菜单事件的例子)
急呀!!!!!!!!!!!!!
谢谢!!!!!!!!!
另外问一下,有没有人做过一个组件可以在Excel和Word里添加菜单?
有范例工程,不过是EXCEL的,把工具条改成菜单条就可以了
急死偶也!