ラベル Pen の投稿を表示しています。 すべての投稿を表示
ラベル Pen の投稿を表示しています。 すべての投稿を表示

2018年3月4日日曜日

いよいよC#でグラフィックの描画を始めるよ

今回はいよいよグラフィックを扱います。

WindowsでFormにグラフィックを描画する方法は何種類かあるんだそうです。今回やるのは、Graphicクラスに用意されているメソッドを使って描画する方法です。具体的には四角を描くメソッドのFillRectangleと楕円を描くメソッドのDrawEllipseです。

描画を実際に行うコードは、myframe_paint()メソッドの中のg.FillRectangle()とg.DrawEllipse()ですが、そもそもこのmyframe_paint()メソッドはMyFormのPaintイベントのイベントハンドラとして定義されていて、どこかから直接呼び出される記述にはなっていません。

また、描画操作を行う対象のGraphicsオブジェクトは、MyFormクラスのPaintイベントが発生したときにイベントハンドラに渡される引数の中の、PaintEventArgsオブジェクトのメンバーとして与えられています。

この、PaintEventArgsオブジェクトのメンバーであるGraphicsオブジェクトを使って描画するという手法は、あちこちで見かけるので、どうやらWindowsでFormに絵を描くときに使う定番の処理なんでしょう。

なお、Paintイベントというのは、何らかの理由でウインドウの再描画が必要になったときに発生するイベントだそうで、これを使って描画することによって、ウインドウのサイズを変えたり、上に別のオブジェクトが重なった後でも、Paintイベントの発生によって再描画をしてくれる、という仕掛けだそうです。

この辺のメカニズムがどうなっているのか、調べてみたいところですが、今日の所は図形が描けるようになってよかった、というところです。

今回学習に使用したリストは以下です。Mainメソッドは言うままでと同じなので割愛します。


/*
 * ようやくグラフィックの描画に入る
 */

using System;
using System.Drawing;
using System.Windows.Forms;

namespace MyFrmApp
{
    public class MyForm : Form
    {
        public MyForm()
        {
            this.Width = 300;
            this.Height = 200;
            this.Paint += myframe_paint;  // イベントハンドラの登録
        }

        private void myframe_paint( object sender, PaintEventArgs e )  // イベントハンドラ
        {
            Graphics g = e.Graphics;    // Graphics型の変数gを定義し、PaintEventArgsのGraphicsの参照を保持
            Pen p = new Pen(Color.Red);  // ペンの設定
            Brush b = new SolidBrush(Color.Blue);  // ブラシの設定
            g.FillRectangle(b, 50, 50, 50, 50);  // 四角形描画
            g.DrawEllipse(p, 75, 75, 50, 50);    // 楕円を描画
        }
    }
}

上記プログラムをコンパイル、実行すると、このようなウインドウが現れます。
今回はこれで終わりにします。

参考文献:
【初心者のためのC#プログラミング入門】グラフィックの描画