插入到Excel的Worksheet中的ATL控件无法重绘

fly4free 2014-05-12 03:36:56
准确的说,根据调试,在自己写的一个程序中调用 Excel::OLEObjects::Add 方法在sheet1插入了OLE控件后,
控件的OnDraw被连续调用两次。

之后我再excel进程外调用控件暴露的接口时,控件内的 m_hWnd 就为NULL,代码无法继续走下去(其实就是改变一个值,再Invalidate() )。

以上过程不走 OnCreate, 但我发现,如果之后切换了 sheet 页的话(比如激活sheet2),再切回sheet1,
OnCreate进入了,OnDraw 也进入了。

我要重绘的内容,不是前两次OnDraw调用能够得到的,而且有些初始数据是在OnCreate里初始化的,怎么样解决这个问题呢?

m_bWindowOnly 不起作用。
...全文
171 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
绿建科技 2014-07-03
  • 打赏
  • 举报
回复
你好,楼主,我最近也 在弄ATL excel OLE对象插入的问题,遇到了点困难,方便加下你QQ一起探讨下吗?我的QQ:2850363663
Jarrylogin 2014-05-13
  • 打赏
  • 举报
回复
额,我来蹭分
fly4free 2014-05-13
  • 打赏
  • 举报
回复
刚才发现一件事:

spWins = spApp->GetWindowsXl();
BSTR bstrName = spWorkbook->GetName();
CComQIPtr<MSExcel::WindowXl> spWin;
spWin = spWins->GetItem(bstrName);
spWin->PutVisible(VARIANT_TRUE);
上面的代码在我 "插入了OLE控件","再excel进程外调用控件暴露的接口" 后 调用的话,就没问题了。。。 在之前调用的话,就有问题。。。 自己解决了,蹭分的进来~
fly4free 2014-05-13
  • 打赏
  • 举报
回复
现在我想 先 对这个Sheet进行 deactivate 然后 activate,但是没有 Deactivate 方法 然后想试着 触发 AppEvents 的 SheetDeactivate 事件行不行,但是仍旧找不到方法,难道这个只能Excel自己去触发吗?

3,245

社区成员

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

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