我使用Firebreath创建一个跨浏览器插件来进行3D图形渲染。
实际绘图在我的本机代码中发生在屏幕外目标上,每次刷新都会调用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是一个问题吗? 任何帮助/建议表示赞赏。
更新 该问题仅发生在win8上的IE10中。我刚刚在win7上安装了IE10,我的插件运行良好。
答案 0 :(得分:2)
原来解决这个问题的方法是使用RefreshEvent中的边界而不是getWindowPosition。
FB::Rect r = dynamic_cast<FB::RefreshEvent*>(evt)->bounds;
这可能会解决您的问题。