我有一个创建一个或多个窗口的应用程序。这些窗口是Direct3D上下文,我在其中进行渲染。
当Windows为桌面(Aero)启用了硬件加速时,一切都很好。我可以毫无问题地移动窗户。
如果我将Windows主题切换到Windows Basic,那将是一场灾难。窗口渲染正确,但是如果我拖动窗口,它会在其后面留下图像的痕迹。想想在Solitaire获胜。
任何可能导致此问题的想法。否则它会很好,但它似乎只是随处移动所有东西。
DirectX渲染器非常简单。 Clear,Select Texture,Select Vertex Buffer,Select Index Buffer,Draw。
更新
每个窗口的窗口层次结构如下:
父窗口,WS_EX_LAYERED
和WS_POPUP
。 GDI +在窗口周围绘制一个框架。
子窗口,WS_EX_TOOLCHAIN
和WS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN
。 DirectX吸引了孩子。
答案 0 :(得分:0)
根据我的确定,如果您不处于合成模式,移动DirectX窗口将执行此操作。很多示例都在主循环中有渲染代码,这意味着PeakMessage会挂起渲染器。
解决方案是,在任何MoveWindow调用之前,通过系统版本检查和DwmIsCompositionEnabled检测是否启用了合成。如果我们无法合成,则快照渲染窗口,隐藏DirectX窗口并绘制快照。移动完成后,重新开启渲染。