c++ - IE9 Web 控件不会在 CHtmlView 中重绘自身

标签 c++ mfc internet-explorer-9

这是一个旧的 MFC 应用程序,它实现了一些选项卡式框架窗口。 frame中任何时候都只显示一个CView,切换tab时使用以下代码隐藏旧tab内容显示新内容:

oldview->EnableWindow(FALSE);
oldview->ShowWindow(SW_HIDE);
newview->EnableWindow(TRUE);
newview->ShowWindow(SW_SHOW);
newview->SetFocus();

现在这一切都适用于任何类型的 CView-s,包括 CHtmlView 派生的,但在计算机上安装 IE9 时停止工作(IE8 工作正常)。在 CHtmlView 之间切换选项卡时,Web 浏览器控件不会重绘自身,并且之前的选项卡内容仍然可见。拖动时,例如该区域上方的计算器窗口,内容以参差不齐的方式重新出现,表明控件只是不理解窗口内容已失效,需要重新绘制。添加 newview->Invalidate() 调用没有帮助,也许我应该深入挖掘 CHtmlView 并直接向 Web 浏览器控件发送一些消息?

TIA, 帕沃

最佳答案

OK,谜底揭晓。看起来点击选项卡也激活了代码中其他地方的拖动循环,并且在开始拖动之前执行了以下代码以重绘刚刚激活的选项卡:

MSG msg;  
while (::PeekMessage(&msg, NULL, WM_PAINT, WM_PAINT, PM_NOREMOVE))
    {
        if (!::GetMessage(&msg, NULL, WM_PAINT, WM_PAINT))
            return;
        DispatchMessage(&msg);
    }

然而,这段代码似乎完全混淆了 IE9 网络浏览器控件。删除此代码后,重绘效果很好(我必须以其他方式解决拖动行为)。

关于c++ - IE9 Web 控件不会在 CHtmlView 中重绘自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7344413/

相关文章:

Javascript 在 IE 中不起作用,但所有其他浏览器都工作正常

javascript - IE9 弹出窗口隐藏在悬停/焦点上

c++ - 如果从文件流读取数据,为什么 gSOAP 将标准输入模式设置为二进制?

c++ - 从 mfc 向导中删除水平分隔线

c++ - 如何在 MFC 的功能区文本框中实现数据验证

c++ - Windows XP 上的真彩色 CImageList

IE9 中的 JavaScript setAttribute

c++ - 为什么移动构造函数需要使用 "rvalue reference"?

c++ - C++中如何向数组中添加元素?

c++ - 我是否将源文件添加到包含 Project.sln 或 Project.vcxproj 的文件夹中?