这是一个旧的MFC应用程序,它实现了一些选项卡式框架窗口。框架中任何时候都只显示一个CView,切换选项卡时,使用以下代码隐藏旧选项卡内容,显示新选项卡内容:
oldview->EnableWindow(FALSE);
oldview->ShowWindow(SW_HIDE);
newview->EnableWindow(TRUE);
newview->ShowWindow(SW_SHOW);
newview->SetFocus();
现在,这一切在任何类型的CView-s上都能很好地工作,包括从CHtmlView派生的CView-s,但是当IE9安装在计算机上时就停止了工作(IE8工作得很好)。在CHtmlView之间切换选项卡时,web浏览器控件不会重绘自身,并且上一个选项卡内容保持可见。例如,当在该区域上拖动计算器窗口时,内容会以参差不齐的方式重新出现,这表明控件只是不了解窗口内容已失效,需要重新绘制。添加一个新的视图->无效()调用没有帮助,也许我应该更深入地挖掘CHtmlView并直接向web浏览器控件发送一些消息?
蒂娅,帕沃
发布于 2011-09-12 18:48:14
好了,谜底揭晓了。在标签上的点击似乎也激活了代码中其他地方的拖动循环,在开始拖动之前,执行了以下代码来重新绘制刚刚激活的标签:
MSG msg;
while (::PeekMessage(&msg, NULL, WM_PAINT, WM_PAINT, PM_NOREMOVE))
{
if (!::GetMessage(&msg, NULL, WM_PAINT, WM_PAINT))
return;
DispatchMessage(&msg);
}
然而,这段代码似乎完全混淆了IE9 web浏览器控件。删除这段代码后,重绘工作得很好(我必须以其他方式解决拖动行为)。
https://stackoverflow.com/questions/7344413
复制