陷于word插件之中,大家拉小弟一把 这几天做了一个word插件,是按照徐景周的方法作的,鉴于个人水平,而且还不大了解ATL,出现了许多问题,希望大家指点。我做的插件是一个菜单条。1、做了插件,是为了执行某些操作,需要得到当前的word路径,不清楚如使用什么方法才能得到。2、word加载菜单后,在该word中打开新word,在新word中菜单条会失效,不清楚是什么原因。希望大家指点。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你添加的是临时菜单,将temp参数置为VARIANT_FALSE即可 我改了还是不行。在注册表中总是由0000003变成000002STDMETHOD(OnConnection)(IDispatch * Application, ext_ConnectMode ConnectMode, IDispatch * AddInInst, SAFEARRAY * * custom) { CComVariant vEmpty(DISP_E_PARAMNOTFOUND, VT_ERROR); 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); CComPtr <Office::CommandBar> spCmdBar; spCmdBars->get_ActiveMenuBar(&spCmdBar); CComPtr < Office::CommandBarControls> spBarControls; spCmdBar->get_Controls(&spBarControls); //MsoControlType::msoControlButton = 1 CComVariant vToolBarType(10);//msoControlPopup //显示工具条 CComVariant vShow(VARIANT_FALSE); CComPtr < Office::CommandBarControl> spNewBar; spNewBar = spBarControls->Add(vToolBarType, vEmpty, vEmpty, vEmpty, vShow); //ATLASSERT(spNewBar); CComQIPtr < Office::CommandBarPopup> spCmdButton(spNewBar); //ATLASSERT(spCmdButton); spCmdButton->put_Caption(OLESTR("标题")); CComPtr < Office::CommandBarControls> spBarControls2; spCmdButton->get_Controls(&spBarControls2); CComPtr < Office::CommandBarControl> spNewBar21; spNewBar21 = spBarControls2->Add(CComVariant(1), CComVariant(1), vEmpty, vEmpty, vShow); CComQIPtr < Office::_CommandBarButton> spCmdButton21(spNewBar21); spCmdButton21->put_Caption(OLESTR("11111")); spCmdButton21->PutVisible(VARIANT_TRUE); CComPtr < Office::CommandBarControl> spNewBar22; spNewBar22 = spBarControls2->Add(CComVariant(1), CComVariant(1), vEmpty, vEmpty, vShow); CComQIPtr < Office::_CommandBarButton> spCmdButton22(spNewBar22); spCmdButton22->put_Caption(OLESTR("222222")); spCmdButton22->PutVisible(VARIANT_TRUE); m_spButton21 = spCmdButton21; m_spButton22 = spCmdButton22; hr = CommandButton1Events::DispEventAdvise((IDispatch*)m_spButton21); if(FAILED(hr)) return hr; hr = CommandButton2Events::DispEventAdvise((IDispatch*)m_spButton22); if(FAILED(hr)) return hr; return E_NOTIMPL; }部分程序如下,其他的都是照着徐的做的,而且还是重新生成的。 如何在它的执行语句中使用CFileDialog dlg(FALSE,_T("doc"),NULL,NULL,"Word文档 (*.doc)|*.doc|"); if(dlg.DoModal()==IDOK)这样的语句?(每次使用时总是报错) 得到Word路径: 可以到注册表找 Hkeymachine..->sofeware->micro->win->... (App path 找这个就可以了.)有一个Word.exe的得到当前文件路径: MessageBox( NULL, m_spApp->GetActiveDocument()->FullName, "Name", MB_OK ); 或者m_spApp->GetPath() + "Winword.exe" qq联系了,msn上了。希望能给我发分代码。[email protected] 也可 AFX_MANAGE_STATE(AfxGetStaticModuleState()); AfxEnableControlContainer();对话框的资源代码 等了一万年也没等到yellowwolf的代码。 读《Windows程序设计》的一个问题 查看别人的源码时发现问题 开发工具VC6.0 只要在界面上放置CRichEditCtrl控件,程序就运行不起来 ***我的辞职报告怎么写*** 环境变量的问题? 如何动态的在对话框上增加editbox?100分 请问如何将VC中添加的资源保存到文件 这一段我翻译的时候有一些问题,自己也没搞清楚原意是什么,请进来看看(分不是问题) 请编程达人帮我反推一下 截获鼠标消息并实时发送socket错误10038?在线急等~~ 关于DLLMAIN的问题(30分给回答最满意者) 出错啦。。。。。。。。。
STDMETHOD(OnConnection)(IDispatch * Application, ext_ConnectMode ConnectMode, IDispatch * AddInInst, SAFEARRAY * * custom)
{
CComVariant vEmpty(DISP_E_PARAMNOTFOUND, VT_ERROR);
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);
CComPtr <Office::CommandBar> spCmdBar;
spCmdBars->get_ActiveMenuBar(&spCmdBar);
CComPtr < Office::CommandBarControls> spBarControls;
spCmdBar->get_Controls(&spBarControls);
//MsoControlType::msoControlButton = 1
CComVariant vToolBarType(10);//msoControlPopup
//显示工具条
CComVariant vShow(VARIANT_FALSE);
CComPtr < Office::CommandBarControl> spNewBar;
spNewBar = spBarControls->Add(vToolBarType, vEmpty, vEmpty, vEmpty, vShow);
//ATLASSERT(spNewBar);
CComQIPtr < Office::CommandBarPopup> spCmdButton(spNewBar);
//ATLASSERT(spCmdButton);
spCmdButton->put_Caption(OLESTR("标题"));
CComPtr < Office::CommandBarControls> spBarControls2;
spCmdButton->get_Controls(&spBarControls2);
CComPtr < Office::CommandBarControl> spNewBar21;
spNewBar21 = spBarControls2->Add(CComVariant(1), CComVariant(1), vEmpty, vEmpty, vShow);
CComQIPtr < Office::_CommandBarButton> spCmdButton21(spNewBar21);
spCmdButton21->put_Caption(OLESTR("11111"));
spCmdButton21->PutVisible(VARIANT_TRUE);
CComPtr < Office::CommandBarControl> spNewBar22;
spNewBar22 = spBarControls2->Add(CComVariant(1), CComVariant(1), vEmpty, vEmpty, vShow);
CComQIPtr < Office::_CommandBarButton> spCmdButton22(spNewBar22);
spCmdButton22->put_Caption(OLESTR("222222"));
spCmdButton22->PutVisible(VARIANT_TRUE);
m_spButton21 = spCmdButton21;
m_spButton22 = spCmdButton22;
hr = CommandButton1Events::DispEventAdvise((IDispatch*)m_spButton21);
if(FAILED(hr))
return hr;
hr = CommandButton2Events::DispEventAdvise((IDispatch*)m_spButton22);
if(FAILED(hr))
return hr;
return E_NOTIMPL;
}
部分程序如下,其他的都是照着徐的做的,而且还是重新生成的。
if(dlg.DoModal()==IDOK)
这样的语句?(每次使用时总是报错)
可以到注册表找 Hkeymachine..->sofeware->micro->win->... (App path 找这个就可以了.)
有一个Word.exe的得到当前文件路径:
MessageBox( NULL, m_spApp->GetActiveDocument()->FullName, "Name", MB_OK );
m_spApp->GetPath() + "Winword.exe"
AfxEnableControlContainer();
对话框的资源代码