mfc 开发office 的工具栏 activex 控件时,需要继承那些接口,及步骤?

lvfeng180 2008-07-09 09:05:01
mfc 开发office 的工具栏 activex 控件时,需要继承那些接口,及步骤?
例如:用atl开发的话,需实现IDTExtensibility2 接口,
mfc 实现该接口时 提示不能实现抽象基类的错误.

望蒋大哥给点明示:

其他知道的大哥大姐们,不吝赐教了
...全文
145 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lvfeng180 2008-07-10
  • 打赏
  • 举报
回复
牛人,小弟实在是佩服.
蒋晟 2008-07-10
  • 打赏
  • 举报
回复
看看编译输出里面抱怨什么函数没有实现
lvfeng180 2008-07-09
  • 打赏
  • 举报
回复
我想用onconnect()
和ondisconnect()方法;

在启动word时在onconnect()事件中
把自定义工具栏添加上,
关闭word时,在ondisconnect()事件中把自定义工具栏卸载掉;


不实现IDTExtensibility2接口,在那里添加这些代码
蒋晟 2008-07-09
  • 打赏
  • 举报
回复
Office的接口只有一个,用MFC或者ATL都是调用的同一个接口
MFC实现COM接口的方法可以参考http://msdn.microsoft.com/en-us/library/5hhehwba.aspx
lvfeng180 2008-07-09
  • 打赏
  • 举报
回复
实现文件添加部分:

BEGIN_INTERFACE_MAP(COfficeSignatureAddInCtrl, COleControl)
INTERFACE_PART(COfficeSignatureAddInCtrl, IID__IDTExtensibility2, MyOfficeObj)
END_INTERFACE_MAP()


STDMETHODIMP_(ULONG) COfficeSignatureAddInCtrl::XMyOfficeObj::Release()
{
METHOD_MANAGE_STATE(COfficeSignatureAddInCtrl, MyOfficeObj)
ASSERT_VALID(pThis);
return pThis->m_xOleObject.Release();
}

STDMETHODIMP_(ULONG) COfficeSignatureAddInCtrl::XMyOfficeObj::AddRef()
{
METHOD_MANAGE_STATE(COfficeSignatureAddInCtrl, MyOfficeObj)
ASSERT_VALID(pThis);
return pThis->m_xOleObject.AddRef();
}

STDMETHODIMP COfficeSignatureAddInCtrl::XMyOfficeObj::QueryInterface(REFIID
iid, LPVOID* ppvObj)
{
METHOD_MANAGE_STATE(COfficeSignatureAddInCtrl, MyOfficeObj)
ASSERT_VALID(pThis);

return pThis->m_xOleObject.QueryInterface(iid, ppvObj);

}



STDMETHODIMP COfficeSignatureAddInCtrl::XMyOfficeObj::OnConnection(IDispatch * Application, ext_ConnectMode ConnectMode, IDispatch * AddInInst, SAFEARRAY * * custom)
{
METHOD_MANAGE_STATE(COfficeSignatureAddInCtrl, MyOfficeObj)
ASSERT_VALID(pThis);
return 1;

}

STDMETHODIMP COfficeSignatureAddInCtrl::XMyOfficeObj::OnDisconnection(ext_DisconnectMode RemoveMode, SAFEARRAY * * custom)
{
METHOD_MANAGE_STATE(COfficeSignatureAddInCtrl, MyOfficeObj)
ASSERT_VALID(pThis);
return 1;

}

STDMETHODIMP COfficeSignatureAddInCtrl::XMyOfficeObj::OnBeginShutdown(SAFEARRAY * * custom)
{
METHOD_MANAGE_STATE(COfficeSignatureAddInCtrl, MyOfficeObj)
ASSERT_VALID(pThis);
return 1;
}
STDMETHODIMP COfficeSignatureAddInCtrl::XMyOfficeObj::OnAddInsUpdate(SAFEARRAY * * custom)
{
METHOD_MANAGE_STATE(COfficeSignatureAddInCtrl, MyOfficeObj)
ASSERT_VALID(pThis);
return 1;
}

STDMETHODIMP COfficeSignatureAddInCtrl::XMyOfficeObj::OnStartupComplete(SAFEARRAY * * custom)
{
METHOD_MANAGE_STATE(COfficeSignatureAddInCtrl, MyOfficeObj)
ASSERT_VALID(pThis);
return 1;

}

lvfeng180 2008-07-09
  • 打赏
  • 举报
回复
头文件:

#import "C:\Program Files\Common Files\Designer\msaddndr.dll" raw_interfaces_only, raw_native_types, no_namespace, named_guids

#import "C:\Program Files\Microsoft Office\OFFICE11\msword.olb" rename_namespace("MSWORD"), rename("ExitWindows","WordExitWindows"), named_guids, raw_interfaces_only
using namespace MSWORD;
............................
.........................
//添加部分
DECLARE_INTERFACE_MAP()

//IDTExtensibility2

BEGIN_INTERFACE_PART(MyOfficeObj,IDTExtensibility2)
INIT_INTERFACE_PART(COfficeSignatureAddInCtrl, MyOfficeObj)
STDMETHOD(OnConnection)(IDispatch * Application, ext_ConnectMode ConnectMode, IDispatch * AddInInst, SAFEARRAY * * custom);
STDMETHOD(OnDisconnection)(ext_DisconnectMode RemoveMode, SAFEARRAY * * custom);
STDMETHOD(OnAddInsUpdate)(SAFEARRAY * * custom);
STDMETHOD(OnStartupComplete)(SAFEARRAY * * custom);
STDMETHOD(OnBeginShutdown)(SAFEARRAY * * custom);
END_INTERFACE_PART_STATIC(MyOfficeObj)
lvfeng180 2008-07-09
  • 打赏
  • 举报
回复
现在是我实现了IDTExtensibility2,报 无法初始化抽象基类_IDTExtensibility2
蒋晟 2008-07-09
  • 打赏
  • 举报
回复
IDTExtensibility2接口是Office插件必须实现的接口。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧