Rectangle() で矩形を描画する

VC++ の CreateSolidBrush() でブラシを設定して Rectangle() で矩形(長方形)を描きます。
★このページの後部に「ストックオブジェクト」の説明があります。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. 以前に作成したプロジェクト(draw)を開いて WM_PAINT を表示して下さい。
    プロジェクトを開く方法は 文字に色を付けて画面に表示する を参照して下さい。
  2. WM_PAINT に矩形を描画するコードを追加します。
    以前に書いたソースコードをコメントとして残しておくと、後から参照したいときに便利です。
    // を書くと行末までがコメントになります。
    複数行に渡るときは /*コメント*/ で囲って下さい。
    生成したペンやブラシは使い終われば削除して下さい。
        case WM_PAINT:
            hdc = BeginPaint(hWnd, &ps);
    
            // TODO: 描画コードをここに追加してください...
            HBRUSH      hBrushYellow,hBrushCyan,hOldBrush;
            hBrushYellow= CreateSolidBrush(RGB(255,255,0));
            hBrushCyan= CreateSolidBrush(RGB(255,0,255));
            hOldBrush= (HBRUSH)SelectObject(hdc,hBrushYellow);  // ブラシを選択
            Rectangle(hdc,50,30,200,80);
            SelectObject(hdc,hBrushCyan); 
            Rectangle(hdc,250,20,300,90);
            SelectObject(hdc,hOldBrush);                        // ブラシを戻す
            DeleteObject(hBrushYellow);                         // ブラシを削除
            DeleteObject(hBrushCyan);                           // ブラシを削除
            /*   
            MoveToEx(hdc,200,60,NULL);       // 開始点に移動
            LineTo(hdc,50,200);              // 線を描く
            LineTo(hdc,350,200);             // 線を描く
            LineTo(hdc,200,60);              // 線を描く
            */
            EndPaint(hWnd, &ps);
            break;
        
  3. ビルド(コンパイル)に続いて実行を行います。
    [デバッグ][デバッグなしで開始]を選択して、ビルドに続いて実行を行います。
    コンパイルの進行状況とエラーがあれば、エラーメッセージが表示されます。
  4. ブラシの説明です。
    ペンやブラシを使うときは、現在設定されている物を退避しておいて描画が終われば元に戻して下さい。
    この処理を怠ると実行中の他のプログラムに悪影響が及ぶことがあります。
    ソースコード 説明
    HBRUSH ブラシの領域を定義
    hBrushYellow 新しく作成する黄色のブラシ
    hBrushCyan, 新しく作成する紫色のブラシ
    hOldBrush 現在のブラシを保存する領域
    CreateSolidBrush() 新しいブラシを作成
    RGB(255,255,0) ブラシの色(赤、緑、青)の濃さ
    SelectObject() 塗りつぶすブラシを設定
    DeleteObject() 使い終わったらブラシを削除
  5. 規定値では「ペンの色は黒」に「ブラシの色は白」に設定されています。
    矩形の中を透明色で塗りつぶす? ときは、HOLLOW_BRUSH(または NULL_BRUSH)を使います。
    HOLLOW_BRUSH などはシステムに最初から用意されているストックオブジェクトと呼ばれるもので、 プログラマが作成したり開放したりする必要の無いオブジェクトです。

【演習】

  1. WM_PAINT: でコメントアウトされているソースコードは、線を描くコードです。
    コメントを外して線を描いてみて下さい。
  2. ストックオブジェクトを使って図形を描いて下さい。
  3. 赤色の太いペンを設定して矩形を描いて、ペンとブラシの関係を確かめて下さい。
  4. 規定値ではブラシは白に設定されています。
    透明色のブラシを使って図形を描いて下さい。
    ウインドウの背景色が白いままでは、透明色の確認が出来ないので、背景色をグレーに設定して下さい。

【NOTE】

  1. Rectangle() の説明です。
    Rectangle(hdc,50,30,200,80);
    ソースコード 説明
    Rectangle() 矩形を表示
    hdc デバイスコンテキスト
    50,30 矩形の左上の座標
    200,80 矩形の右下の座標
  2. ストックオブジェクトの一覧です。
    オブジェクト 説明
    BLACK_BRUSH 黒のソリッドブラシ
    DKGRAY_BRUSH ダークグレイのブラシ
    GRAY_BRUSH グレイのブラシ
    HOLLOW_BRUSH 塗りつぶしを行わないブラシ
    LTGRAY_BRUSH ライトグレイのブラシ
    NULL_BRUSH HOLLOW_BRUSH と同じ
    WHITE_BRUSH 白のソリッドブラシ
    BLACK_PEN 黒のペン
    NULL_PEN 描画されないペン
    HOLLOW_PEN NULL_PEN と同じ
    ANSI_FIXED_FONT ANSI の固定ピッチフォント
    ANSI_VAR_FONT ANSI の可変ピッチフォント
    DEVICE_DEFAULT_FONTDEVICE の規定値フォント
    OEM_FIXED_FONT DEVICE で供給されるフォント
    SYSTEM_FONT Windous の規定値フォント
    SYSTEM_FIXED_FONT Windous 2.0のフォント
    DEFAULT_PALETTE デフォルトのカラーパレット
  3. ストックオブジェクトの使い方です。
    ブラシで説明しますが、ペンの場合も同様です。
          HBRUSH      hOldBrush;
          hOldBrush= (HBRUSH)SelectObject(hdc,GetStockObject(NULL_BRUSH));
              :
          SelectObject(hdc,hOldBrush);        // ブラシを戻す
        

超初心者のプログラム入門(Win32API C++)