问题:
1、用ATL或MFC做的Activex插入Word后,好像只有修改大小的时候,才会触发Activex的OnDraw事件,最小化Word或者移动Word时候都不触发。
如何能让Word在最小化或者移动的时候也触发OnDraw事件?
2、用ATL或MFC做的Activex插入Word后,不能触发相应的右键或者左键事件(当然已经编写相应的事件代码)。
如何让控件在Word中能响应鼠标事件??
1、用ATL或MFC做的Activex插入Word后,好像只有修改大小的时候,才会触发Activex的OnDraw事件,最小化Word或者移动Word时候都不触发。
如何能让Word在最小化或者移动的时候也触发OnDraw事件?
2、用ATL或MFC做的Activex插入Word后,不能触发相应的右键或者左键事件(当然已经编写相应的事件代码)。
如何让控件在Word中能响应鼠标事件??
第二个问题应该是不可能发生的,无论控件是有窗口还是无窗口的,都应该都接收到鼠标消息,不知道你的控件是怎么做的。
解决了这个问题,马上结贴!
问题:
用ATL和MFC写的OCX,调用VBA插入到WORD与直接从Word菜单里面插入->对象那种操作,效果不一样
调用VBA插入Word之后,即使Wrod退出设计模式,也不能让OCX响应鼠标事件,必需按照Word的提示,双击之后才能响应
如何能让调用VBA插入的OCX,在退出设计模式后,能直接响应鼠标事件?
录制的插入WORD的VBA代码:
Sub insert()
Selection.InlineShapes.AddOLEObject ClassType:="BMFCOCX.bmfcocxCtrl.1", _
FileName:="", LinkToFile:=False, DisplayAsIcon:=False
End Sub
我是在加载项中,参照VBA代码写的,效果一样,不知道有没有其他方法能实现??
在微软搞的东西中,有很多选项必须由用户改变,不能通过代码改变,比如UAC、比如任务栏的自定义工具栏是否被自动加载。
问题:
用ATL和MFC写的OCX,调用VBA插入到WORD与直接从Word菜单里面插入->对象那种操作,效果不一样
调用VBA插入Word之后,即使Wrod退出设计模式,也不能让OCX响应鼠标事件,必需按照Word的提示,双击之后才能响应
如何能让调用VBA插入的OCX,在退出设计模式后,能直接响应鼠标事件?
录制的插入WORD的VBA代码:
Sub insert()
Selection.InlineShapes.AddOLEObject ClassType:="BMFCOCX.bmfcocxCtrl.1", _
FileName:="", LinkToFile:=False, DisplayAsIcon:=False
End Sub 有没有其他高手能解决的?
谁解决,200分就都给谁!!!
楼主,把你的代码贴出来,或者邮给我看看.为的就是想要你的200分呀.呵呵呵.
这里稍稍提示一下需要注意的问题:有一些必要的初始化不要忽略, 我就遇到过控件图片忘记在其构造函数中初始化:
(CComPtr<IPicture> m_ActiveXPicture = NULL;).结果控件没有显示出来.ActiveX控件的绘制要避免闪烁,这可以采用二次缓存的方法解决.Activex控件在word文档中的位置,要避免只能插入到word文档的第一页.大名鼎鼎的NTKO签名软件就有这个问题,它的签名控件永远只能插入到第一页,即使能移动,也只能在第一页移动.好想要楼主的200分.呵呵.
你的QQ是多少?或者留个邮箱
我会给你发邮件
PS:你在Word里面插入Activex,用的是那种方法??
我的Activex都是默认的用ATL向导建立的。
当然,我用Word的插入对象对话框,可以正常响应鼠标事件,但是,用VBA宏就不行,不知道你用的是那种方法插入Activex。宏代码如下:
Sub insert()
Selection.InlineShapes.AddOLEObject ClassType:="BMFCOCX.bmfcocxCtrl.1", _
FileName:="", LinkToFile:=False, DisplayAsIcon:=False
End Sub 解决了马上给200分!!!
来这里和朋友一起探讨学习,互相取长补短吧.
.cn
我整个工程用的ATL,没有MFC也没有vba.
下面是我的部分代码,仅供参考.void CWordAddin::InsertActiveX(IPicture *pic)
{CComPtr<MSWORD::_Document> spDoc;
m_spApp->get_ActiveDocument(&spDoc);
if(spDoc==NULL)return;
CComPtr<MSWORD::Shapes> spShapes;spDoc->get_Shapes(&spShapes);CComVariant ClassType(_MYPROGID);
CComVariant left,top,width,height;
CComVariant vEmpty(DISP_E_PARAMNOTFOUND, VT_ERROR);
CComPtr<MSWORD::Shape> spShape;float fx,fy;
GetInsertPos(fx,fy);//如果哥们没有这个函数,就让fx=fy=0吧,反正是测试用嘛.
left=fx; top = fy;spShapes->AddOLEControl(&ClassType,&left,&top,&vEmpty,&vEmpty,&vEmpty,&spShape);
.....
}
还有个问题:
你的GetInsertPos是如何获取到当前的插入点的坐标的??
用:m_spApp->GetActiveWindow()->GetPoint
好像有点问题,获取的是负数??
2.关闭设计模式。在设计模式下。你添加的Activex插件Word只认为是张图片
spSelection->get_Information(wdVerticalPositionRelativeToPage,&vTop);
fx = vLeft.fltVal;
fy = vTop.fltVal;