在Delete之前必须先unadvise假设你的组件是按照下面的继承方式来实现按钮点击响应的: class ATL_NO_VTABLE CYourCom : public ..., public IDispEventSimpleImpl<1, CYourCom, &__uuidof(_CommandBarButtonEvents)>那么你应该用下面的方式来取消事件通知: IDispEventSimpleImpl<1, CYourCom, &__uuidof(_CommandBarButtonEvents)>::DispEventUnadvise(m_spButton);
_Application->get_ActiveDocument()->GetFullName()
就可以得到当前打开文档的全路径.
2.
不是很明白你的意思.
CComPtr<Word::_Document> pDoc;
hr = m_spApp->get_ActiveDocument(&pDoc);
if (pDoc != NULL)
{
CComBSTR bstrName;
pDoc->get_FullName(&bstrName);
USES_CONVERSION;
MessageBox(NULL, W2CT(bstrName), _T("当前文档"), MB_OK);
}我用上面的代码,放在OnConnection中行不?插件正常启动了,可是为什么没弹出提示呢?
2.是这样的,我在菜单工具栏上添加了一个菜单,如何在OnDisconnection中删除呢?我现在是每启动一次WORD就会多出一个插件生成的菜单。
2、调用AtlUnadvise即可
class ATL_NO_VTABLE CYourCom :
public ...,
public IDispEventSimpleImpl<1, CYourCom, &__uuidof(_CommandBarButtonEvents)>那么你应该用下面的方式来取消事件通知:
IDispEventSimpleImpl<1, CYourCom, &__uuidof(_CommandBarButtonEvents)>::DispEventUnadvise(m_spButton);
我添加菜单的代码:
CComVariant vType(msoControlPopup);
CComVariant vPos(4);
CComVariant vTemp(VARIANT_FALSE);
CComVariant vMenuEmpty(DISP_E_PARAMNOTFOUND, VT_ERROR);
IDispatchPtr spDip;
spDip = spCmdCtrls->Add(vType, vMenuEmpty, vMenuEmpty, vPos, vTemp);
//spCmdPopup指向弹出菜单
CComQIPtr<Office::CommandBarPopup> spCmdPopup(spDip);
m_spMenu = spCmdPopup; _bstr_t bstrSecureView(OLESTR("NEW MENU"));
spCmdPopup->put_Caption(bstrSecureView);
其中的m_spMenu是成员变量:
CComPtr<Office::CommandBarPopup> m_spMenu;在OnDisconnection中该如何处理m_spMenu呢?