我一直在學習如何使用GDI,但我很難理解Invalidate()如何重載onPaint事件並且看起來好像繞圈了一圈。用GDI繪製線條失效()/ onPaint問題
我有以下代碼
private void DrawLine()
{
System.Drawing.Pen myPen = new System.Drawing.Pen(System.Drawing.Color.Red);
System.Drawing.Graphics formGraphics;
formGraphics = this.CreateGraphics();
formGraphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
formGraphics.DrawLine(myPen, mouseDown.X, mouseDown.Y, mouseUp.X, mouseUp.Y);
myPen.Dispose();
formGraphics.Dispose();
}
protected override void OnPaint(PaintEventArgs e)
{
DrawLine();
}
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
mouseDown = e.Location;
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
mouseUp = e.Location;
}
不過,我可以得到我剛剛繪製出現行的唯一方法是手動調用的Invalidate(),當我這樣做是清除任何以前的行。任何人都可以告訴我我要去哪裏嗎?
感謝您的回答,它效果很好,但是當我畫一條線時,屏幕上的任何以前的線都會被擦除。還有什麼我失蹤? – GrandMasterFlush
@GrandMasterFlush你需要一個位圖。我會馬上更新。 – LarsTech
非常感謝您抽出時間發帖,我整個上午都一直圍着這個圈子走。這解釋了很多。 – GrandMasterFlush