C# 中的绘图框架以避免闪烁
本文关键字:闪烁 框架 绘图 | 更新日期: 2023-09-27 18:32:14
我刚刚开始学习C#,我想寻求有关绘画的良好做法的建议,以避免闪烁。
我使用了这里提到的方法,例如双缓冲和打开WS_EX_COMPOSITED
,但适合我的方法是:
调用PaintEventHandler
:
this.dgData.Paint += new System.Windows.Forms.PaintEventHandler(this.myPaint);
并使用PaintEventArgs
绘制:
private void myPaint(object sender, System.Windows.Forms.PaintEventArgs e)
{
Graphics myGraphics = e.Graphics;
// Use myGraphics to draw
}
并且PaintEventHandler
是通过Timer
上的Refresh()
触发的。
private void TimerElapsed(object sender, System.EventArgs eventArgs)
{
Refresh();
}
但是,我担心的是,这种绘制方式要求我对窗体上的每个控件都有一个PaintEventHandler
。
因此,我想问一下是否有更优雅的方式来实现这一目标。
谢谢!
我无法再说出我在哪里找到这段代码,但这是我为消除闪烁所做的: 我在控件的构造函数中设置了这些样式:
public partial class MyControl : Control
{
public MyControl()
{
InitializeComponent()
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
SetStyle(ControlStyles.ResizeRedraw, true);
SetStyle(ControlStyles.UserMouse, true);
}
}