2

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

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

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

使用“Spy++”我可以看到我的控件确实在那里,但它的所有绘画都消失了。如果我移动浏览器或更改其大小,控件将被重新绘制,否则它根本不可见。

我试图调试这个问题并找出谁在擦除我的绘图。我想出了以下技术:

  1. 使用 WinDBG,我在以下方法的“user32.dll”DLL 处添加了断点:user32!InvalidateRect、user32!InvalidateRgn、user32!FillRect、
  2. 我将这些方法定义为仅显示堆栈并继续运行,
  3. 我运行了上述有问题的场景,
  4. 当问题发生时,我试图查看谁调用了“Invalidate”或“FillRect”,
  5. 由于这一切发生得非常快,我正在使用“打印屏幕”按钮来冻结这一刻

这样做几次后,我发现正是在我的控件消失时,以下堆栈调用'user32!FillRect':

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

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

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

非常感谢任何提示!

帕兹优惠

4

1 回答 1

0

结论: 错误在Microsoft Internet Explorer 10

我使用 Microsoft 支持服务来进一步调查此问题。以下是调查结果:

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

Windows Update碰巧的是,我正在使用的机器在一段时间内没有设置为由服务自动更新。作为升级 IE 的一部分,我必须首先使用Windows Update服务将 Windows 更新到其最新补丁。

在此过程中Windows UpdateMicrosoft Internet Explorer 10自动更新到其最新补丁。IE 更新后问题就消失了。此外,ActiveX GUI 加载过程变得更快。

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

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

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

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

现在一切都按预期工作。

谢谢,帕佐

于 2013-07-25T11:12:19.750 回答