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