1

我有一个自定义选项卡样式控件,它在内部通过单击选项卡时显示或隐藏相关页面来工作。

单击选项卡时发生的事情的基本顺序是

  1. 将相关页面放在前面
  2. 显示相关页面(通过使用适当的标志调用 SetWindowPos)
  3. 隐藏我们刚刚掩盖的旧页面
  4. 重新粉刷窗户

我的一些标签是用 DirectX 渲染的。在 Windows XP 下,一切正常,在选项卡之间切换时没有闪烁。但在 Windows 7(或 Vista)下,第 2 步中对 SetWindowPos 的调用会重绘窗口,并且在第 4 步之前会有未初始化的像素闪烁,通常是在我的应用程序开始运行之前桌面上的任何内容。

这只发生在 DirectX 页面上,但我不确定 DirectX 是什么导致了这种情况,如果有的话 - 页面之间还有其他差异,这只是明显的模式。我不确定这是真正的线索还是红鲱鱼。

GDI 页面直到第 4 步才会重新绘制。我逐步检查了代码并检查了 - 这不仅仅是 DWM 在第 2 步中使用了正确缓存的位图 - 它实际上直到第 4 步才重新绘制。

这是背景信息,但目前我不确定如何解决这个特定问题,所以我的问题更笼统:

有哪些因素会影响 SetWindowPos 决定是否重绘?

4

0 回答 0