Выпуск StretchDIBits для запуска окна без окон в IE10 на win8

Я использую 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);
}

Все работает хорошо, пока не попробую свой плагин на win8 в IE10. проблема в том

Положение окна, полученное из окна без окна, больше не является положением окна, оно ведет себя как позиция плагина, что означает, что место назначения HDC плагина без окна находится в координатах пространства плагина, но в другом случае (IE9, chrome, firefox и т. д.) это координаты оконного пространства.

Итак, это проблема с IE10 на win8 или проблема с огнедышащим? Любая помощь/предложения приветствуются.

Обновление: проблема возникает только в IE10 на win8. Я только что установил IE10 на win7, и мой плагин работает хорошо.


person Wayne Wang    schedule 25.06.2013    source источник
comment
У меня тоже проблема, просто к вашему сведению; вполне возможно, что FireBreath делает что-то не так, но, к сожалению, я не знаю, что именно. Это в моем списке вещей, которые нужно исправить в конечном итоге, но у нас просто недостаточно клиентов, использующих наши плагины на win8, чтобы я потратил время, чтобы выяснить, что происходит. Это скорее проблема с ActiveX, чем конкретно с огненным дыханием.   -  person taxilian    schedule 25.06.2013
comment
Эта проблема также затрагивает IE11 как в WIndows 8, так и в Window 10. Эта проблема не затрагивает IE 11 в Windows 7.   -  person splrs    schedule 02.08.2016


Ответы (1)


Оказывается, это можно исправить, используя границы в RefreshEvent вместо getWindowPosition.

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

Это, вероятно, решит вашу проблему.

person taxilian    schedule 22.01.2014
comment
Отличный материал. Похоже, это решило аналогичную проблему для меня. - person splrs; 02.08.2016