未聚焦时 Direct2D 窗口呈黑色

发布于 2024-08-28 15:32:39 字数 295 浏览 13 评论 0原文

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

有没有一种方法可以让未聚焦的 Direct2D 窗口正常绘制(注意:像往常一样调用 WM_PAINTClearBeginPaint 也如此)等都没有错误)

提前致谢。

I have a Direct2D window which paints fine when in focus; however, when focus moves to another window (same application or another), the entire window goes black. I pinned the issue down to the use of ID2D1HwndRenderTarget::Clear. This function is vital to my application as without it, painting becomes rather... weird.

Is there a way an un-focused Direct2D window can paint as normal (note: WM_PAINT is being called as usual, as is Clear, BeginPaint, etc. all without error)

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

只等公子 2024-09-04 15:32:39

来自 MSDN,

Handling Device Loss

当你的程序运行时,
您正在使用的图形设备
可能会变得不可用。例如,
如果显示屏出现故障,设备可能会丢失
分辨率发生变化,或者用户
卸下显示适配器。如果
设备丢失,渲染目标也丢失
变得无效,连同任何
与设备相关的资源
与设备关联。直接二维
通过返回来发出丢失设备的信号
错误代码 D2DERR_RECREATE_TARGET 来自
EndDraw 方法。如果您收到
此错误代码,您必须重新创建
渲染目标和所有
设备相关资源。

请检查链接以获取更多信息。 http://msdn.microsoft.com/en-us /library/ff684174(VS.85).aspx

From MSDN,

Handling Device Loss

While your program is running, the
graphics device that you are using
might become unavailable. For example,
the device can be lost if the display
resolution changes, or if the user
removes the display adapter. If the
device is lost, the render target also
becomes invalid, along with any
device-dependent resources that were
associated with the device. Direct2D
signals a lost device by returning the
error code D2DERR_RECREATE_TARGET from
the EndDraw method. If you receive
this error code, you must re-create
the render target and all
device-dependent resources.

Please check the link for more info. http://msdn.microsoft.com/en-us/library/ff684174(VS.85).aspx

听不够的曲调 2024-09-04 15:32:39

根据我使用 DirectX 的经验,如果屏幕返回原样,是因为 DX 丢失了它正在“绘画”的设备。这种情况经常发生 - 例如 - 当在全屏 DirectX 窗口和另一个应用程序之间切换时,反之亦然。

因此,您需要做的是重新初始化 DX 设备,以便它可以恢复绘画操作。

这可能会有所帮助(不是我的网站,但快速谷歌搜索找到了它)

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

With my experience with DirectX, if the screen turns back its because DX lost the device it was 'painting' to. This happens a lot - for instance - when switching between a full-screen DirectX window to another application, and vice-versa.

So what you need to do is re-intialize the DX device so it can resume painting operations.

This might help some more (not my website, but a quick Google search turned it up)

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文