首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows-8和10破坏了我的ActiveX控制绘图?

Windows-8和10破坏了我的ActiveX控制绘图?
EN

Stack Overflow用户
提问于 2013-07-09 07:33:42
回答 1查看 1.6K关注 0票数 2

当我在“Windows 8”操作系统和浏览器“10”上运行我的Active-X控件时,我遇到了一种非常奇怪的行为。

控制:我的Active-X控件是非常稳定的产品,我的公司已经在数百名满意的客户之间销售了好几年。该控件是一个ATL自定义绘图控件,用C++编写,并由“Visual 2008”构建。

问题--绘图消失了:当我第一次按下打开控件的链接时,我可以看到我的控件正在逐渐绘制(因为我的数据加载有时很慢),但最终所有的绘图都消失了,在控件所在的位置留下了一个空白的白色背景色。

使用‘Spy++’我可以看到我的控制真的在那里,但它的所有绘画消失了。如果我移动浏览器或改变它的大小,控件将被重新绘制,但否则它就是不可见的。

我试着调试这个问题,找出谁在擦除我的画。我想出了以下技巧:

  1. 使用WinDBG,我在‘user32.dll’DLL上添加了断点: user32!InvalidateRect,user32!InvalidateRgn,user32!FillRect,
  2. 我将这些方法定义为只显示堆栈并继续运行,
  3. 我运行了上面的问题场景,
  4. 当问题发生时,我想看看是谁叫“无效”或“FillRect”,
  5. 由于这一切发生得非常快,所以我使用“打印屏幕”按钮来冻结瞬间。

做了几次之后,我发现当我的控件消失时,下面的堆栈调用“user32!FillRect”:

代码语言:javascript
复制
user32!FillRect
MSHTML!memcpy+0x9805
MSHTML!COmWindowProxy::SwitchMarkup+0x468
MSHTML!CMarkup::SetInteractiveInternal+0x428
MSHTML!CMarkup::RequestReadystateInteractive+0x98
MSHTML!CMarkup::BlockScriptExecutionHelper+0xde
MSHTML!CHtmPost::Exec+0x794
MSHTML!CHtmPost::Run+0x1c
MSHTML!PostManExecute+0x5f
MSHTML!PostManResume+0x7b
MSHTML!CHtmPost::OnDwnChanCallback+0x3a
MSHTML!CDwnChan::OnMethodCall+0x19
MSHTML!GlobalWndOnMethodCall+0x169
MSHTML!GlobalWndProc+0xd7
user32!InternalCallWinProc+0x23
user32!UserCallWinProcCheckWow+0x100
user32!DispatchMessageWorker+0x3ef
user32!DispatchMessageW+0x10
IEFRAME!CTabWindow::_TabWindowThreadProc+0x981
IEFRAME!LCIETab_ThreadProc+0x378
iertutil!CIsoWinMsg::PostQueuedMessagesToComponent+0x4b
IEShims!NS_CreateThread::DesktopIE_ThreadProc+0x66
KERNEL32!BaseThreadInitThunk+0xe
ntdll!__RtlUserThreadStart+0x72
ntdll!_RtlUserThreadStart+0x1b

这是一致的。在检查这个堆栈时,我发现该消息属于Internet Explorer_Hidden类的窗口,它是大小为zero (0x0)的窗口,但具有WS_VISIBLE样式。此窗口属于浏览器。

有人知道这个现象吗?浏览器隐藏窗口是否有可能导致此问题?你能推荐其他方法来寻找正在擦除我的画的堆栈吗?

非常感谢你的任何暗示!

Paz报价

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-25 11:12:19

结论:Microsoft Internet Explorer 10 中的缺陷。

我使用Microsoft支持服务来进一步调查这个问题。随函附上调查结果:

微软支持查看了我的IE (Internet Explorer)的版本,并建议首先升级IE到其最新的补丁。

碰巧,我正在使用的机器在一段时间内没有被Windows Update服务自动更新的设置。作为升级IE的一部分,我必须首先使用Windows Update服务将窗口更新为最新的修补程序。

Windows Update过程中,Microsoft Internet Explorer 10被自动更新为其最新的修补程序。一旦IE更新,问题就消失了。此外,ActiveX图形用户界面加载过程变得更快。

旧版本的Microsoft Internet Explorer 10导致了这个问题:

  • 版本: 10.0.9200.16384
  • 更新版本: RTM (KB2718695)

新版本的Microsoft Internet Explorer 10解决了这个问题:

  • 版本: 10.0.9200.16635
  • 更新版本: 10.0.7 (KB2846071)

现在一切都如期而至。

谢谢你,帕佐

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17542534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档