IE9 Web控件不在CHtmlView中重绘自身

时间:2011-09-08 07:10:59

标签: c++ mfc internet-explorer-9

这是一个旧的MFC应用程序,它实现了一些标签框架窗口。在框架中随时只显示一个CView,切换选项卡时,以下代码用于隐藏旧选项卡内容并显示新选项卡:

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

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

TIA, 帕沃

1 个答案:

答案 0 :(得分:1)

好的,神秘的解决了。看来单击选项卡还会激活代码中其他位置的拖动循环,在开始拖动之前,执行以下代码以重新绘制刚刚激活的选项卡:

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

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