Windows 7 闪烁的UI问题-是什么导致windows 7中的DWM决定在调用SetWindowPos时立即刷新?

Windows 7 闪烁的UI问题-是什么导致windows 7中的DWM决定在调用SetWindowPos时立即刷新?,windows-7,windows-vista,directx,flicker,dwm,Windows 7,Windows Vista,Directx,Flicker,Dwm,我有一个自定义的选项卡式控件,在内部,它通过在单击选项卡时显示或隐藏相关页面来工作 单击选项卡时发生的事情的基本顺序是 将相关页面置于首页 显示相关页面(使用适当的标志调用SetWindowPos) 隐藏我们刚刚掩盖的那一页 重新粉刷窗户 我的一些选项卡是用DirectX呈现的。在Windows XP下,一切正常,在选项卡之间切换时不会闪烁。但在Windows7(或Vista)下,第2步调用SetWindowPos会重新绘制窗口,在第4步之前会出现未初始化的像素闪烁,通常是在我的应用程序开始运行

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

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

  • 将相关页面置于首页
  • 显示相关页面(使用适当的标志调用SetWindowPos)
  • 隐藏我们刚刚掩盖的那一页
  • 重新粉刷窗户
  • 我的一些选项卡是用DirectX呈现的。在Windows XP下,一切正常,在选项卡之间切换时不会闪烁。但在Windows7(或Vista)下,第2步调用SetWindowPos会重新绘制窗口,在第4步之前会出现未初始化的像素闪烁,通常是在我的应用程序开始运行之前桌面上的任何东西

    这种情况只发生在DirectX页面上,但我不确定DirectX的哪些方面会导致这种情况,如果有的话——页面之间也存在其他差异,这只是显而易见的模式。我不确定这是一条真正的线索还是一条红鲱鱼

    GDI页面直到第4步才重新绘制。我仔细阅读了代码并进行了检查——不仅仅是DWM在步骤2中使用了正确缓存的位图——直到步骤4,它才真正重新绘制

    这是背景信息,但目前我不确定如何解决这个具体问题,因此我的问题更一般:

    哪些因素会影响SetWindowPos是否重新绘制的决定