我有一个 Direct2D 窗口,它在聚焦时画得很好;但是,当焦点移动到另一个窗口(相同的应用程序或另一个)时,整个窗口都会变黑。我将问题归结为使用ID2D1HwndRenderTarget::Clear
. 此功能对我的应用程序至关重要,因为没有它,绘画变得相当……奇怪。
有没有一种方法可以使未聚焦的 Direct2D 窗口正常绘制(注意:WM_PAINT
照常调用,如Clear
,BeginPaint
等都没有错误)
提前致谢。
来自 MSDN,
Handling Device Loss
当您的程序正在运行时,您正在使用的图形设备可能会变得不可用。例如,如果显示分辨率发生变化,或者如果用户移除了显示适配器,则设备可能会丢失。如果设备丢失,则渲染目标以及与设备关联的任何设备相关资源也会变得无效。Direct2D 通过从 EndDraw 方法返回错误代码 D2DERR_RECREATE_TARGET 来通知丢失的设备。如果您收到此错误代码,则必须重新创建渲染目标和所有设备相关资源。
请检查链接以获取更多信息。http://msdn.microsoft.com/en-us/library/ff684174(VS.85).aspx
以我在 DirectX 上的经验,如果屏幕变回它是因为 DX 丢失了它正在“绘画”的设备。这种情况经常发生 - 例如 - 在全屏 DirectX 窗口与另一个应用程序之间切换时,反之亦然。
因此,您需要做的是重新初始化 DX 设备,以便它可以恢复绘画操作。
这可能会有所帮助(不是我的网站,而是快速的谷歌搜索)
http://www.programmersheaven.com/2/FAQ-DIRECTX-Avoid-task-switching