WPF:GDI在其他过程中的绘图闪烁

时间:2014-05-04 19:48:41

标签: c# gdi+ gdi

有很多关于GDI绘图和闪烁问题的主题,但我还没有找到任何关于其他过程中的绘图。

问题

基本上我试图使用Graphics.FromHwnd绘制到Hwnd。这很有效,但涉及到很多闪烁。我试图使用的应用程序是一个游戏(不是由我制作),并且具有相当高的刷新率,与表单不同。

尝试

我尝试使用GDI.Rectangle函数进行绘图,该函数使用HDC绘制并使用Graphics.DrawRectangle绘制到Hwnd。我没有注意到性能上的差异,但“图形”似乎更容易使用,因为它不需要gdi32.dll来绘制形状,与GDI不同。

我也试过双重缓冲,但我再也没有发现任何差异。

对我而言,似乎双重缓冲无法正常工作,因为我正试图在如此高的刷新率窗口中绘制。

问题

  • 是否可以获取窗口的刷新率并将其用于计时器以更新图形?
  • 是否有可能使图形“粘住”直到更新为止它们不会自动消失?

如果有人知道如何做到这一点,或者知道其他解决方案来消除闪烁,我会很感激帮助!

提前致谢。

1 个答案:

答案 0 :(得分:0)

在做了一些研究后,我得出的结论是,使用透明窗口最适合我的情况。以下是我得出这个结论的方法:

我已经使用一个应用程序来读取窗口事件,以检查是否有任何连续的事件流可能是窗口失效,但是没有。

我确实找到了一种方法,可以在游戏使窗口无效时实际读取,但它是一种黑客攻击:它可以取代游戏的d3d9你自己的.dll文件,调用所有原始函数,但捕获事件。由于不得不向最终用户分发dll,因此我无法获得有关如何或甚至是否有效的任何详细信息,更不用说这实际上是黑客攻击。