1

我使用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

回答

2

原來的解決方法是在RefreshEvent中使用邊界而不是getWindowPosition。

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

這可能會解決您的問題。

+1

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

+0

好東西。這似乎爲我解決了類似的問題。 – splrs