最近在做个word的电子签章,需要在word上增加个按钮,在网上找了些资料按钮式添上去了。可是怎样能在按钮的处理函数中获得到Application对象或者 ActiveDocument对象 来操作打开的word文件那? 网上有代码:
void __stdcall CMyAddin::OnClickButton1(IDispatch * /*Office::_CommandBarButton**/ Ctrl,VARIANT_BOOL * CancelDefault)
{
CComQIPtr <Office::_CommandBarButton> spBtn1(Ctrl);
CComQIPtr <Word::_Application> spApp;
CComQIPtr <Word::_Document> spDoc;
CComQIPtr <Word::InlineShapes> spInS;
...
}
是通过参数IDispatch * Ctrl来初始化一个_CommandBarButton对象,然而07的消息处理函数是在
STDMETHOD raw_GetCustomUI)(BSTR RibbonID, BSTR * RibbonXml)返回的XML里指定,该函数大概为
STDMETHODIMP CWordAddin::OnMyButton(IDispatch *pIDispControl);
怎么从pIDispControl得到_Application对象那...?
望高手能指点一二....
void __stdcall CMyAddin::OnClickButton1(IDispatch * /*Office::_CommandBarButton**/ Ctrl,VARIANT_BOOL * CancelDefault)
{
CComQIPtr <Office::_CommandBarButton> spBtn1(Ctrl);
CComQIPtr <Word::_Application> spApp;
CComQIPtr <Word::_Document> spDoc;
CComQIPtr <Word::InlineShapes> spInS;
...
}
是通过参数IDispatch * Ctrl来初始化一个_CommandBarButton对象,然而07的消息处理函数是在
STDMETHOD raw_GetCustomUI)(BSTR RibbonID, BSTR * RibbonXml)返回的XML里指定,该函数大概为
STDMETHODIMP CWordAddin::OnMyButton(IDispatch *pIDispControl);
怎么从pIDispControl得到_Application对象那...?
望高手能指点一二....
解决方案 »
- 利用UDP向多个IP发送消息,丢包的问题
- 主管催了,看了8个星期没明白,谢谢,几十行代码,到底启动几个进程,在哪
- 一个关于tooltip的问题
- 在CAsyncsocket类中,connect时为什么不能把SOCKADDR_IN强制转成SOCKADDR类型呢?
- 刚知道J2EE是怎么回事,现又要求维护VC程序,该怎么办?没什么兴趣,想专心把一个先搞明白了-----
- 【求救】程序调试的运行的时候提示在debug目录下olelink.cpp有问题!
- 在客户区动态创建的Edit控件,如何判断整个控件在可见的区域?
- 小问题!各位来看看啊!!
- 如何给对话框添加 InitInstance() 响应函数
- 绑定解绑任务栏图标的taskbarpin/taskbarunpin具体程序在哪?
- 这些函数, 它们是在什么情况下被调用的
- 关于读取PC机8253计数器0初始值的问题
1.添加WORD盖章按钮:
实现方法两个:
方法1:做WORD模板,里边做好按钮。在要盖章的WORD中加载这个模板。
方法2:做WORD插件,需要实现OnConnection、OnDisconnection,,等方法,在STDMETHOD(OnConnection)(IDispatch * Application, ext_ConnectMode ConnectMode, IDispatch * AddInInst, SAFEARRAY * * custom){}里得到Application,这样就能操作WORD了。在插件里边实现添加按钮操作。
缺点:安装后所有WORD文件中都能看到此按钮。2.印章控件:使用ATL写一个控件。3.盖章:
实现ATL控件。调用微软WORD接口插入控件。
实例(VB代码):
'ctrl.SignCtrl为写的ATL控件。 ctrl为控件名,SignCtrl为类名。
Set sealContainerInline = Application.Selection.InlineShapes.AddOLEControl("ctrl.SignCtrl")
Set sealContainer = sealContainerInline.ConvertToShape
With sealContainer
.LockAnchor = False
.WrapFormat.AllowOverlap = True
.WrapFormat.Side = 0
.WrapFormat.Type = 3
If iStampPosType = 0 Then '最底层
.ZOrder 5
Else '最顶层
.ZOrder 4
End If
End With
还想问下,怎么能在控件中或其他地方保存一些其他信息,比如文件的HASH值。因为在文档上画出个印章只是表面。为了验证,必须嵌入一些其他信息...