不对焦时Direct2D窗口黑色

时间:2010-04-09 14:32:26

标签: c++ windows focus hwnd direct2d

我有一个Direct2D窗口,在聚焦时画得很好;但是,当焦点移动到另一个窗口(相同的应用程序或另一个窗口)时,整个窗口变黑。我将问题归结为使用ID2D1HwndRenderTarget::Clear。这个功能对于我的应用程序至关重要,因为没有它,绘画变得相当......很奇怪。

是否有一种非聚焦Direct2D窗口可以正常绘制的方式(注意:WM_PAINT照常被调用,ClearBeginPaint等都是如此,所有这些都没有错误)

提前致谢。

2 个答案:

答案 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