Окно Direct2D черное, когда не в фокусе - PullRequest
2 голосов
/ 09 апреля 2010

У меня есть окно Direct2D, которое хорошо рисует в фокусе; однако, когда фокус перемещается в другое окно (то же приложение или другое), все окно становится черным. Я связал проблему с использованием ID2D1HwndRenderTarget::Clear. Эта функция жизненно важна для моего приложения, так как без нее рисование становится довольно ... странным.

Есть ли способ, как несфокусированное окно Direct2D может рисовать как обычно (примечание: WM_PAINT вызывается как обычно, как Clear, BeginPaint и т. Д. Все без ошибок)

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 28 июля 2010

Из MSDN,

Handling Device Loss

Пока ваша программа работает, графическое устройство, которое вы используете может стать недоступным. Например, устройство может быть потеряно, если дисплей разрешение меняется, или если пользователь удаляет адаптер дисплея. Если устройство потеряно, цель рендеринга также становится недействительным, наряду с любым зависящие от устройства ресурсы, которые были связано с устройством. Direct2D сигнализирует о потерянном устройстве, возвращая код ошибки D2DERR_RECREATE_TARGET из метод EndDraw. Если вы получаете этот код ошибки, вы должны заново создать цель рендера и все зависящие от устройства ресурсы.

Пожалуйста, проверьте ссылку для получения дополнительной информации. http://msdn.microsoft.com/en-us/library/ff684174(VS.85).aspx

1 голос
/ 30 мая 2010

С моим опытом работы с DirectX, если экран возвращается, потому что DX потерял устройство, на которое он «рисовал». Это часто случается, например, при переключении между полноэкранным окном DirectX и другим приложением и наоборот.

Итак, вам нужно заново инициализировать устройство DX, чтобы оно могло возобновить операции рисования.

Это может помочь еще немного (не мой сайт, но быстрый поиск в Google включил его)

http://www.programmersheaven.com/2/FAQ-DIRECTX-Avoid-task-switching

...