GDI+學習例項1——窗體單機滑鼠繪製曲線
阿新 • • 發佈:2018-12-31
程式功能:在Form裡建立一個座標系,以座標系0點為原點,採集滑鼠左鍵點選,繪製前後兩點間的連線。
執行後,介面如下,並繪製了一個“CSDN”圖案。
(1)初始點定義
private Point startPoint = new Point(50,217);
private Point endPoint = new Point(50, 217);
(2)繪製座標系private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; Font vertFont = new Font("Verdana", 10, FontStyle.Bold); Font horzFont = new Font("Verdana", 10, FontStyle.Bold); SolidBrush vertBrush = new SolidBrush(Color.Black); SolidBrush horzBrush = new SolidBrush(Color.Blue); Pen blackPen = new Pen(Color.Black,2); Pen bluePen = new Pen(Color.Blue,2); g.DrawLine(blackPen, 50, 220, 50, 25); g.DrawLine(bluePen, 50, 220, 250, 220); g.DrawString("0", horzFont, horzBrush, 30, 220); g.DrawString("1", horzFont, horzBrush, 50, 220); g.DrawString("2", horzFont, horzBrush, 70, 220); g.DrawString("3", horzFont, horzBrush, 90, 220); g.DrawString("4", horzFont, horzBrush, 110, 220); g.DrawString("5", horzFont, horzBrush, 130, 220); g.DrawString("6", horzFont, horzBrush, 150, 220); g.DrawString("7", horzFont, horzBrush, 170, 220); g.DrawString("8", horzFont, horzBrush, 190, 220); g.DrawString("9", horzFont, horzBrush, 210, 220); g.DrawString("10", horzFont, horzBrush, 230, 220); StringFormat vertStrFormat = new StringFormat(); vertStrFormat.FormatFlags = StringFormatFlags.DirectionVertical; g.DrawString("-", horzFont, horzBrush, 50,212,vertStrFormat); g.DrawString("-", horzFont, horzBrush, 70, 212, vertStrFormat); g.DrawString("-", horzFont, horzBrush, 90, 212, vertStrFormat); g.DrawString("-", horzFont, horzBrush, 110, 212, vertStrFormat); g.DrawString("-", horzFont, horzBrush, 130, 212, vertStrFormat); g.DrawString("-", horzFont, horzBrush, 150, 212, vertStrFormat); g.DrawString("-", horzFont, horzBrush, 170, 212, vertStrFormat); g.DrawString("-", horzFont, horzBrush, 190, 212, vertStrFormat); g.DrawString("-", horzFont, horzBrush, 210, 212, vertStrFormat); g.DrawString("-", horzFont, horzBrush, 230, 212, vertStrFormat); g.DrawString("100-", vertFont, vertBrush, 20, 20); g.DrawString("90-", vertFont, vertBrush, 25, 40); g.DrawString("80-", vertFont, vertBrush, 25, 60); g.DrawString("70-", vertFont, vertBrush, 25, 80); g.DrawString("60-", vertFont, vertBrush, 25, 100); g.DrawString("50-", vertFont, vertBrush, 25, 120); g.DrawString("40-", vertFont, vertBrush, 25, 140); g.DrawString("30-", vertFont, vertBrush, 25, 160); g.DrawString("20-", vertFont, vertBrush, 25, 180); g.DrawString("10-", vertFont, vertBrush, 25, 200); vertFont.Dispose(); vertBrush.Dispose(); horzFont.Dispose(); horzBrush.Dispose(); blackPen.Dispose(); bluePen.Dispose(); g.Dispose(); }
(3)滑鼠點選響應函式
private void Form1_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { Graphics g1 = this.CreateGraphics(); Pen linePen = new Pen(Color.Green, 1); Pen ellipsePen = new Pen(Color.Red, 1); startPoint = endPoint; endPoint = new Point(e.X, e.Y); g1.DrawLine(linePen, startPoint, endPoint); if (checkBox1.Checked) { g1.DrawRectangle(ellipsePen, e.X - 2, e.Y - 2, 4, 4); } else { g1.DrawEllipse(ellipsePen, e.X - 2, e.Y - 2, 4, 4); } linePen.Dispose(); ellipsePen.Dispose(); g1.Dispose(); } }
(4)清空繪製函式
private void button1_Click(object sender, EventArgs e) { // Create a Graphics object Graphics g = this.CreateGraphics(); startPoint.X = 50; startPoint.Y = 217; endPoint.X = 50; endPoint.Y = 217; this.Invalidate(this.ClientRectangle); }