如何从WinForms应用程序访问桌面组合引擎?

时间:2010-03-19 17:30:10

标签: c# winforms windows-vista

是否可以从winforms应用程序访问Windows Vista中的桌面合成引擎? DCE显然涉及将应用程序渲染到DCE缓冲区而不是直接渲染到屏幕上。由于winforms应用程序无法获取有关监视器刷新率和扫描线状态的信息(除了通过DirectX),因此winforms应用程序中的动画会受到撕裂效果的影响。启用DCE后,撕裂效果会减少但仍然存在(显然DCE仍然可以抓取一个缓冲区,您的应用程序在写入并将其渲染到屏幕的中途,从而产生半个半帧的一半) - 下一个撕裂效应)。

我的winforms应用程序有没有办法与DCE通信,并且可能避免在缓冲区切换时间内呈现?

1 个答案:

答案 0 :(得分:1)

您是否可以导入DWMAPI.DLL,调用DwmGetCompositionTimingInfo,撕开DWM_TIMING_INFO结构并将您的应用与您可以识别的任何时间信息同步?

或者,您可以使用DwmSetDxFrameDuration

来控制它