当我在“Windows 8”操作系统和浏览器“10”上运行我的Active-X控件时,我遇到了一种非常奇怪的行为。
控制:我的Active-X控件是非常稳定的产品,我的公司已经在数百名满意的客户之间销售了好几年。该控件是一个ATL自定义绘图控件,用C++编写,并由“Visual 2008”构建。
问题--绘图消失了:当我第一次按下打开控件的链接时,我可以看到我的控件正在逐渐绘制(因为我的数据加载有时很慢),但最终所有的绘图都消失了,在控件所在的位置留下了一个空白的白色背景色。
使用‘Spy++’我可以看到我的控制真的在那里,但它的所有绘画消失了。如果我移动浏览器或改变它的大小,控件将被重新绘制,但否则它就是不可见的。
我试着调试这个问题,找出谁在擦除我的画。我想出了以下技巧:
做了几次之后,我发现当我的控件消失时,下面的堆栈调用“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这是一致的。在检查这个堆栈时,我发现该消息属于Internet Explorer_Hidden类的窗口,它是大小为zero (0x0)的窗口,但具有WS_VISIBLE样式。此窗口属于浏览器。
有人知道这个现象吗?浏览器隐藏窗口是否有可能导致此问题?你能推荐其他方法来寻找正在擦除我的画的堆栈吗?
非常感谢你的任何暗示!
Paz报价
发布于 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导致了这个问题:
新版本的Microsoft Internet Explorer 10解决了这个问题:
现在一切都如期而至。
谢谢你,帕佐
https://stackoverflow.com/questions/17542534
复制相似问题