前回の色を指定して直線を描画するでは直線の描画をしましたが、今回は矩形と楕円の描画をおこないます。

前回使用したクラスを少し変えるだけで矩形と楕円の描画は可能です。矩形と楕円の描画のための

DrawRectangle
FillRectangle
DrawEllipse
FillEllipse

4つのクラスをDrawLineクラスを継承して作成します。

DrawLineクラスとの違いは直線を引くか矩形・楕円を描くかの違いであり、始点と終点の情報から図形を描画することに関しては同じです。

DrawRectangleクラス

最初に矩形を描画するためのDrawRectangleクラスを示します。

FillRectangleクラス

次に内部が塗りつぶされた矩形を描画するためのFillRectangleクラスを示します。Graphics.DrawRectangleメソッドとGraphics.FillRectangleメソッドでは1ピクセルぶんの差がでるのでFillRectangleクラスではGraphics.DrawRectangleメソッドとGraphics.FillRectangleメソッドを両方実行しています。あとはDrawRectangleクラスと同じです。

DrawEllipseクラス

次に楕円を描画するためのDrawEllipseクラスを示します。ドラッグが開始された座標と終了した座標から矩形を取得するのは完全に同じです。あとはGraphics.DrawRectangleメソッドのかわりにGraphics.DrawEllipseメソッドを実行するだけです。

FillEllipseクラス

FillEllipseクラスは塗りつぶされた楕円を描画するときに使います。Graphics.DrawEllipseといっしょにGraphics.DrawEllipseメソッドを呼び出しているのが唯一の違いです。

Form2クラスの処理

Form2クラスの処理を示します。

マウスボタンが押されたときの処理

最初にマウスボタンが押されたときの処理を示します。ラジオボタンの状態から描画しようとしているのは点、直線、矩形、楕円のどれなのか、矩形、楕円の場合は内部を塗りつぶすのかを調べます。あとは適切なクラスのインスタンスを生成します。

マウスがドラッグされているときの処理

次にマウスがドラッグされているときの処理を示します。マウスがクリックされたときに生成したオブジェクトのCurPointプロパティに現在マウスが存在するクライアント座標をセットするだけです。あとはオブジェクト側でうまくやってくれます。

ドラッグされているときに図形の描画

ImageEditPanel_Paint内で呼び出されるDrawProvisionalメソッドを示します。DrawTempXXXメソッドやFillTempXXXメソッドを適切に呼び出して確定前の図形の描画をおこないます。

マウスボタンが離されたあとの位置調整の処理

ドラッグが終了したあと再びクリックがされたときやEnterキーが押される前であれば方向キーで描画位置を変更するための処理を示します。

左に移動させる処理を示します。

上に移動させる処理を示します。

右に移動させる処理を示します。

下に移動させる処理を示します。

以下は確定時の処理です。