StretchDIBits在IE8上win8上firebreath无窗口窗口的问题
我使用Firebreath创建一个跨浏览器插件来执行3D图形渲染。StretchDIBits在IE8上win8上firebreath无窗口窗口的问题
实际绘制发生在我的本地代码在屏幕外的目标,每一次刷新将调用为myplugin :: onWindowRefresh,这将StretchBlt以插件的窗户窗口,如下面的代码,
FB::PluginWindowlessWin *win = dynamic_cast<FB::PluginWindowlessWin*>(pluginWindow);
dstHdc = win->getHDC();
if(srcDib && dstHdc)
{
FB::Rect r = win->getWindowPosition();
int dstWidth = r.right - r.left;
int dstHeight = r.bottom - r.top;
SetStretchBltMode(dstHdc, HALFTONE);
StretchDIBits(dstHdc, r.left, r.top, dstWidth, dstHeight, 0, 0, srcWidth, srcHeight,
srcDib->GetBits(), srcDib->GetBitmapInfo(), DIB_RGB_COLORS, SRCCOPY);
}
一切运行良好,直到我在IE10的win8上试用我的插件。问题是
窗口的位置从窗户的窗口得到的是不窗口位置任何更多的,它像插件位置,即目的窗户插件的HDC是在插件的空间坐标,但在其他情况下, (IE9,Chrome,Firefox等),它是窗口空间坐标。
那么,在win8或firebreath问题上的IE10有问题吗? 任何帮助/建议表示赞赏。
更新: 这个问题只发生在win10上的IE10上。我只是在win7上安装IE10,而我的插件运行良好。
原来的解决方法是在RefreshEvent中使用边界而不是getWindowPosition。
FB::Rect r = dynamic_cast<FB::RefreshEvent*>(evt)->bounds;
这可能会解决您的问题。
感谢taxilian,它的工作原理! –
好东西。这似乎为我解决了类似的问题。 – splrs
我也有问题,只是供参考; FireBreath完全可能做错了事,但不幸的是我不知道它是什么。这是我最终需要修复的事情,但是我们没有足够的客户在win8上使用我们的插件,因此我花了很多时间来弄清楚发生了什么。它比activebreath更像是一个activex问题,尽管 – taxilian
这个问题也影响了Windows 8和Window 10上的IE11。IE 11 Windows 7不受此问题的影响。 – splrs