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,而我的插件运行良好。

+1

我也有问题,只是供参考; FireBreath完全可能做错了事,但不幸的是我不知道它是什么。这是我最终需要修复的事情,但是我们没有足够的客户在win8上使用我们的插件,因此我花了很多时间来弄清楚发生了什么。它比activebreath更像是一个activex问题,尽管 – taxilian

+0

这个问题也影响了Windows 8和Window 10上的IE11。IE 11 Windows 7不受此问题的影响。 – splrs

原来的解决方法是在RefreshEvent中使用边界而不是getWindowPosition。

FB::Rect r = dynamic_cast<FB::RefreshEvent*>(evt)->bounds; 

这可能会解决您的问题。

+1

感谢taxilian,它的工作原理! –

+0

好东西。这似乎为我解决了类似的问题。 – splrs