SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

仮想ネットワークの実装で学ぶTCP/IP

仮想ネットワーク実装でTCP/IPを学ぼう(7)
― GDI+と独自プロトコルの定義

仮想ネットワーク実装でTCP/IPを学ぼう(7)


  • X ポスト
  • このエントリーをはてなブックマークに追加

図形の描画

 図形を描画するには、Draw系のメソッド(DrawEllipseなど)もしくはFill系のメソッド(FillEllipseなど)を使用します。Draw系のメソッドは輪郭を描画し、Fill系のメソッドは指定された領域内を塗りつぶします。直線や曲線を指定すればいろいろな図形が描画できますが、.NET Frameworkには円や多角形を描画するための便利なメソッドが用意されているので、今回はそれを解説します。

 円を描画したい場合には、DrawEllipseもしくはFillEllipseを使用し、多角形を描画したい場合はDrawPolygonもしくはFillPolygonメソッドを使用します。DrawEllipseメソッドとFillEllipseメソッドの仕様を示したサンプルプロジェクトEllipseSampleを用意しましたので、それを用いて解説します。

円を描画するサンプル(C#)
//重要な部分だけ抜粋
public partial class Form1 : Form
{
    private void Form1_Paint( object sender, PaintEventArgs e )
    {
        //描画する間隔
        float addX = 10;
        float addY = 10;

        //円を描画
        Graphics grfx = e.Graphics;
        Pen pen = new Pen( Color.Red );
        pen.Width = 10;
        RectangleF drawRect = new RectangleF(
            addX + pen.Width,
            addY + pen.Width,
            ( this.ClientSize.Width / 2 ) - ( pen.Width * 2 ) - addX - 1,
            this.ClientSize.Height - ( pen.Width * 2 ) - ( addY * 2 ) - 1 );
        grfx.DrawEllipse( pen, drawRect );

        //塗りつぶした円を描画(極力左の円に合わす)
        SolidBrush brush = new SolidBrush( Color.Black );
        RectangleF fillRect = new RectangleF(
            drawRect.Left + drawRect.Width + pen.Width + addX,
            addY + ( pen.Width / 2 ),
            ( this.ClientSize.Width / 2 ) - ( addX * 2 ) - ( pen.Width / 2 ) - 1,
            this.ClientSize.Height - ( addY * 2 ) - ( pen.Width / 2 ) - 1 );
        grfx.FillEllipse( brush, fillRect );
    }
}
サンプル実行画面
サンプル実行画面

 このサンプルは、画面半分の左側に円の輪郭を描画し、水際に塗りつぶした円を描画しています。この2つの図形はフォームのサイズに合わして描画するようにしています。DrawEllipseメソッドとFillEllipseメソッドはともに、描画領域(このサンプルではSystem.Drawing.RectangleF構造体で指定)と描画方法(ペンもしくはブラシ)を指定するようになっています。描画領域は、開始地点のX座標とY座標および、幅と高さで表されています。両メソッドは、複数の引数を受け取るオーバーロードが用意されていますが、ひとまずサンプルが使用している引数のメソッドの使い方を覚えると分かりやすくてよいと思います。

 注意してほしいのは、DrawEllipseメソッドとFillEllipseメソッドに渡している幅と高さの値が違う点です。これは、「Draw系メソッドとFill系メソッドでは描画される図形のサイズが異なる」からです。そのため、このサンプルでは、なるべく両方の図形のサイズを合わせるために幅と高さの計算式を変えています。しかし、もしかしたらドット単位ではサイズが異なるかもしれません。両メソッドは描画される図形のサイズが異なりますので、十分に注意してください。

次のページ

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
仮想ネットワークの実装で学ぶTCP/IP連載記事一覧

もっと読む

この記事の著者

インドリ(インドリ)

分析・設計・実装なんでもありのフリーエンジニア。ブログ「無差別に技術をついばむ鳥(http://indori.blog32.fc2.com/)」の作者です。アドバイザーをしたり、システム開発したり、情報処理技術を研究したりと色々しています。座右の銘は温故知新で、新旧関係なく必要だと考えたものは全て学...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5170 2010/06/17 10:35

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング