点をつなげて線を描画する



プログラムの作成において「繰り返し処理」と「比較処理」 は非常に重要で、この講座でも最も力を注いでいる所です。
しっかりトレーニングを積んで自由に使いこなせるようになりましょう。

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

プログラムの説明

  1. 新規プロジェクト(Loop)を作成して WM_PAINT の位置までスクロールして下さい。
    プロジェクトの作成は Windows プログラムを自動的に作成する を参照して下さい。
  2. WM_PAINT: に点を5個横に並べて描画するソースコードを追加します。
          case WM_PAINT:
               hdc = BeginPaint(hWnd, &ps);
               // TODO: 描画コードをここに追加してください...
               SetPixel(hdc,50,10,RGB(255,0,0));
               SetPixel(hdc,51,10,RGB(255,0,0));
               SetPixel(hdc,52,10,RGB(255,0,0));
               SetPixel(hdc,53,10,RGB(255,0,0));
               SetPixel(hdc,54,10,RGB(255,0,0));
               EndPaint(hWnd, &ps);
               break;
        
  3. [デバッグ][デバッグなしで開始]を選択して、ビルドに続いて実行を行います。
    コンパイルの進行状況とエラーがあれば、エラーメッセージが表示されます。
    小さな赤い点が五個並んで表示されたら完成です。
  4. 5個の点を表示する部分をループにして下さい。
  5. 赤い点を横に200個並べて描画して下さい。

【繰り返しで描画する】

    SetPixel(hdc,50,10,RGB(255,0,0));
    SetPixel(hdc,51,10,RGB(255,0,0));
    SetPixel(hdc,52,10,RGB(255,0,0));
    SetPixel(hdc,53,10,RGB(255,0,0));
    SetPixel(hdc,54,10,RGB(255,0,0));

これと同じ処理をループを使って行います。
ループを考えるとき「最初の値と最後の値」がポイントです。
    int     i;
    for(i=50; i<55; i++)
    {   SetPixel(hdc,i,10,RGB(255,0,0));
    }

  1. 繰り返しに使用する変数 i を定義します。名前は i 意外でもかまいません。
    int i;
  2. i の値に 50 を設定して繰り返しを始めます。
    for(i=50; ...
  3. i の値が 55 より小さい間繰り返します。
    ... i<55; ...
  4. 毎回 i の値をインクリメント(1ずつアップ)します。
    i++ は i=i+1 と同じ意味を持ちます。
    ... i++)
  5. 繰り返される命令です。i の値が変化することに注目して下さい。
    { SetPixel(hdc,i,10,RGB(255,0,0)); }
  6. i の値は次のように変化します。
    i の値が 55 になったとき SetPixel() を実行しないでループから抜け出します。
    50 51 52 53 54

【演習】

  1. 座標 50,10 から50個の点を横に並べて描画して下さい。
  2. 点の色を緑にして200個の点を横に並べて描画して下さい。
  3. 座標 50,10 から100個の点を縦に並べて描画して下さい。
  4. 座標 50,10 から横に100個の点と、50,20 から始まる平行する点を同時に描画して下さい。
  5. ページ先頭の画像と同じように線を描いて下さい。

【NOTE】

SetPixel() の説明です。
    SetPixel(hdc,50,10,RGB(255,0,0));
    SetPixel(hdc,51,10,RGB(255,0,0));
              :
ソースコード 説明
SetPixel() 小さな点を描画します
hdc デバイスコンテキストです
50,10 点を描画する座標です
RGB(255,0,0) 点の色です

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