色を変えながら矩形を描画する


二重のループの中で20回ごとに色を変えながら VC++ の SetPixel を使って矩形を描画します。

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

プログラムの説明

  1. 以前に作成したプロジェクト(Loop)を開いて WM_PAINT を表示して下さい。
    プロジェクトを開く方法は 文字に色を付けて画面に表示する を参照して下さい。
  2. WM_PAINT にラインごとに色を変えながら矩形を描画するコードを追加します。
        case WM_PAINT:
            hdc = BeginPaint(hWnd, &ps);
            // TODO: 描画コードをここに追加してください...
            int     x,y,r,g,b;
            for(y=0; y<40; y++)
            {   r= rand()%256;
                g= rand()%256;
                b= rand()%256;
                for(x=0; x<200; x++)
                {   SetPixel(hdc,x,y,RGB(r,g,b));
                }
            }
            EndPaint(hWnd, &ps);
            break;
        
  3. ビルド(コンパイル)に続いて実行を行います。
    [デバッグ][デバッグなしで開始]を選択して、ビルドに続いて実行を行います。
  4. 次の画像が表示されたら完成です。

【演習】

ページ先頭の画像は20回ごとに点の色を変えています。
これに挑戦してみて下さい。

【ヒント】

ループの制御変数に x と y を使い「二重にループ」しています。
for(y=0; y<40; y++)
{       :
    for(x=0; x<200; x++)
    {   SetPixel(hdc,x,y,RGB(r,g,b));
    }
}

二重ループを構成する場合でも「ループごとの最初の値と最後の値」がポイントです。
制御変数の値は次のようになります。
Yの値 Xの値 SetPixelの累積実行回数
0 0~199 まで繰り返す 200 (1ドットライン目)
1 0~199 まで繰り返す 400 (2ドットライン目)
2 0~199 まで繰り返す 600 (3ドットライン目)
39 0~199 まで繰り返す 8000(40ドットライン目)

繰り返し処理の中で比較処理を使ってみました。
次のプログラムを実行すると、どのような図形が描画されるでしょう。
int     x,y;
for(y=0; y<40; y++)
{   for(x=0; x<200; x++)
    {   if (y%10==0)    SetPixel(hdc,x+10,y+5,RGB(255,0,0));
        else            SetPixel(hdc,x+10,y+5,RGB(0,255,0));
    }
}

20回ごとに点の色を変えてみましょう。
int     x,y,r,g,b;
for(y=0; y<40; y++)
{   for(x=0; x<200; x++)
    {   if (x%20==0)
        {   r= rand()%256;
            g= rand()%256;
            b= rand()%256;
        }
        SetPixel(hdc,x,y,RGB(r,g,b));
    }
}

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