マウスボタンを押下したとき、描画開始の合図としてbStartをtrueにします。そして、その位置をPoint配列pt[0]に格納します(別に配列にしなくてもいいけど)。
マウス移動時、bStartがtrueなら、pt[0]から、現在位置(pt[1])までの直線を描画します。直線の描画にはGraphics.DrawLineメソッドを使います。これは、すでに第3章で出てきました。
今回は、Paintイベントを処理しないで、マウス移動時に描画することにします。これには、CreateGraphicsメソッドを使ってGraphicsを作成する必要があります。CreateGraphicsメソッドについてはすでに第10章で出ていますね。
マウスボタンを解放したら、bStartをfalseにして、もう描画をしないようにします。
では、サンプルを見てみましょう。
// mouse02.cs using System; using System.Drawing; using System.Windows.Forms; class mouse02 : Form { static Point[] pt; bool bStart; public static void Main() { Application.Run(new mouse02()); } public mouse02() { bStart = false; pt = new Point[2]; Text = "猫でもわかるC#プログラミング"; BackColor = SystemColors.Window; MouseDown += new MouseEventHandler(mouse02_MouseDown); MouseUp += new MouseEventHandler(mouse02_MouseUp); MouseMove += new MouseEventHandler(mouse02_MouseMove); } void mouse02_MouseDown(object sender, MouseEventArgs e) { bStart = true; pt[0] = e.Location; } void mouse02_MouseUp(object sender, MouseEventArgs e) { bStart = false; } void mouse02_MouseMove(object sender, MouseEventArgs e) { if (bStart) { Graphics g = CreateGraphics(); pt[1] = e.Location; g.DrawLine(new Pen(new SolidBrush(Color.Red)), pt[0], pt[1]); g.Dispose(); } } }CreateGraphicsで作成したGraphicsは使い終わったら、Disposeする必要があります。
では、実行結果を見てみましょう。
Paintイベントを処理していないので、他のウィンドウなどで隠されると、せっかく描画した模様が消されてしまいます。
Paintイベントを処理して同様のことをするプログラムを作ってみてください。
Update 03/Dec/2006 By Y.Kumei