在自定义控件中实现子控件的双缓冲(C#)

5

我希望对一个包含按钮的自定义控件进行双缓冲处理。我尝试了多种方法来实现控件的双缓冲,如SetStyle、BufferedGraphicsContext和绘制到位图等。这些方法都可以很好地处理控件的自定义绘制,但是它们都无法将按钮绘制到后台缓冲区中。请问如何解决这个问题?


参见:https://dev59.com/yXVD5IYBdhLWcg3wI36L。 - ESRogs
1个回答

2
从技术上讲,如果它们是标准的.NET WinForms按钮,则您无法这样做,并且如果没有必要,您真的不应该这样做。
按钮本身通过受保护的DoubleBuffered属性控制。访问此属性的唯一方法是从S.W.F.Button派生一个新类,并在该类的实例上实现启用DoubleBuffered属性的代码(我可能会在构造函数中执行此操作)。最后,在您的窗体上使用该新类的对象,而不是S.W.F.Buttons。
但是,据我所知,按钮纯粹从WinAPI绘制;它们不是GDI+。因此,您不应该需要为其绘图进行双缓冲处理。话虽如此,我不知道您的使用场景,也不知道您的应用程序显示的症状,所以我可能是错误的。 :)
您可以考虑查看书籍Pro .NET 2.0 Windows Forms and Custom Controls in C#。所有这些信息都摘自该书。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接