我正在开发一个类似于MS Paint的小型绘画程序。目前,我正在尝试实现'选择功能'. 但我面临屏幕闪烁问题,所以我进行了一些研究,并发现我应该创建自己的Panel类。
public class MyDisplay : Panel
{
public MyDisplay()
{
this.DoubleBuffered = true;
this.SetStyle(ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint |
ControlStyles.ResizeRedraw |
ControlStyles.ContainerControl |
ControlStyles.OptimizedDoubleBuffer |
ControlStyles.SupportsTransparentBackColor
, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
this.UpdateStyles();
}
}
在主表单中,有以下字段:
MyDisplay panel1 = new MyDisplay();
Graphics graphics1 = panel1.CreateGraphics();
我在一个面板上使用了3个事件:
- MouseDown - 在这里我得到了点p1
- MouseMove - 这就是我遇到闪烁问题的地方,我每次点击鼠标移动时都会调用
graphics1.drawRectangle(...)
和graphics1.Clear()
- MouseUp - 我只是最后一次绘制矩形。
编辑:
我已经覆盖了OnPaint方法,但我仍然不知道下一步该怎么做。
protected override void OnPaint(PaintEventArgs e)
{
// Call the OnPaint method of the base class.
base.OnPaint(e);
// Call methods of the System.Drawing.Graphics object.
e.Graphics.DrawString(Text, Font, new SolidBrush(ForeColor), ClientRectangle);
}
编辑2: 我应该在位图/图像上绘制并覆盖OnPaint方法,从那里复制图像并将其粘贴到面板上吗?