矩形で国旗を描く

ハンガリーとフランスの国旗を横に並べて描画します。
VC++ の CreateSolidBrush() でブラシを設定して、Rectangle() で矩形を組み合わせた国旗を描画します。

ハンガリー

フランス

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

プログラムの説明

  1. プロジェクトを作成して WM_PAINT を表示して下さい。
    プロジェクトの作成は Windows プログラムを自動的に作成する を参照して下さい。
  2. WM_PAINT に矩形を描画するコードを追加します。
        case WM_PAINT:
            hdc = BeginPaint(hWnd, &ps);
            // TODO: 描画コードをここに追加してください...
            HPEN        hOldPen;
            HBRUSH      hBrush1,hBrush2,hBrush3,hBrush4,hOldBrush;
            // ブラシを生成する
            hBrush1= CreateSolidBrush(RGB(220,0,0));
            hBrush2= CreateSolidBrush(RGB(255,255,255));
            hBrush3= CreateSolidBrush(RGB(0,150,0));
            hBrush4= CreateSolidBrush(RGB(0,120,160));
            // ハンガリーの国旗を描画
            hOldPen= (HPEN)SelectObject(hdc,GetStockObject(NULL_PEN));
            hOldBrush= (HBRUSH)SelectObject(hdc,hBrush1);
                :
            // フランスの国旗を描画
                :
            // ブラシとペンを元に戻す
                :
            // 生成したブラシとペンを削除
                :
            EndPaint(hWnd, &ps);
            break;
        
  3. 背景色が白色のままでは国旗との境界が区別できないので、背景色をグレーに設定します。
    ソースプログラムをスクロールして MyRegisterClass() を表示して下さい。
    ブラシはストックオブジェクトの GRAY_BRUSH を使います。
        ATOM MyRegisterClass(HINSTANCE hInstance)
        {
            WNDCLASSEX wcex;
                  :
                  :
            wcex.hbrBackground	= (HBRUSH)GetStockObject(GRAY_BRUSH);
                  :
        
  4. 二カ国の国旗を横に並べるとウインドウの幅が狭すぎ(広すぎ)ます。
    国旗のサイズに合わせてウインドウサイズを設定します。
    ソースプログラムをスクロールして InitInstance() を表示して下さい。
        BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
        {
                  :
           hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
                               0, 0, 640, 320, NULL, NULL, hInstance, NULL);
                  :
        
  5. [デバッグ][デバッグなしで開始]を選択して、ビルドに続いて実行を行います。
    コンパイルの進行状況とエラーがあれば、エラーメッセージが表示されます。
    ページ先頭の画像が表示されたら完成です。

【演習】

ハンガリーとフランスの国旗を横に並べて描画して下さい。

ハンガリー

フランス

【NOTE】

FillRect

塗りつぶした矩形を描画する関数を使って国旗を描画して下さい。
FillRect(hdc,&rect,hBrush);
引数説明
hdc 矩形を描画する HDC
rect 描画する範囲を定義する RECT 構造体
hBrush 塗りつぶすブラシ

SetRect

RECT 構造体に値を設定する SetRect() 関数が用意されています。
RECT 構造体の説明は DrawText で文字列を表示する を参照して下さい。
SetRect(&RECT構造体,左座標,上座標,右座標,下座標);
【例】
RECT rect;
SetRect(&rect,100,50,300,150);

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