0

我有一个创建 1 个或多个窗口的应用程序。这些窗口是 Direct3D 上下文,我在其中进行渲染。

当 Windows 为桌面(Aero)打开硬件加速时,一切都很好。我可以毫无问题地移动窗口。

如果我将 Windows 主题切换到 Windows Basic,那将是一场灾难。窗口渲染正确,但如果我拖动窗口,它会在其后面留下图像的痕迹。想想在纸牌中获胜。

任何可能导致这种情况的想法。否则很好,但它似乎只是在移动时绘制了所有内容。

DirectX 渲染器非常简单。清除,选择纹理,选择顶点缓冲区,选择索引缓冲区,绘制。

更新

每个窗口的窗口层次结构如下:

父窗口WS_EX_LAYEREDWS_POPUP. GDI+ 在窗口周围绘制一个框架。子窗口WS_EX_TOOLCHAINWS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN. DirectX 吸引孩子。

4

1 回答 1

0

根据我的判断,如果您未处于合成模式,则移动 DirectX 窗口即可。很多示例在主循环中都有渲染代码,这意味着 PeakMessage 会挂起渲染器。

解决方案是,在调用任何 MoveWindow 之前,通过系统版本检查和 DwmIsCompositionEnabled 检测是否启用了合成。如果我们无法合成,则对渲染窗口进行快照,隐藏 DirectX 窗口并绘制快照。移动完成后,重新打开渲染。

于 2013-09-27T16:02:06.033 回答