螺旋模様を線で描きます



VC++ の MoveToEx() と LineTo() の繰り返しで、矩形の螺旋模様を描きます。

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

プログラムの説明

  1. 新規プロジェクト(Spiral)を作成して WM_PAINT の位置までスクロールして下さい。
  2. WM_PAINT: に直線を描画するソースコードを追加します。
    直線を描画する方法は次のとおりです。
          case WM_PAINT:
               hdc = BeginPaint(hWnd, &ps);
               // TODO: 描画コードをここに追加してください...
               MoveToEx(hdc,100,50,NULL);      // 開始点に移動
               LineTo(hdc,300,100);            // 線を描く
    
               MoveToEx(hdc,200,100,NULL);     // 開始点に移動
               LineTo(hdc,300,200);            // 線を描く
               LineTo(hdc,150,300);            // 線を描く
               LineTo(hdc,250,350);            // 線を描く
               EndPaint(hWnd, &ps);
               break;
        
  3. [デバッグ][デバッグなしで開始]を選択して、ビルドに続いて実行を行います。
    コンパイルの進行状況とエラーがあれば、エラーメッセージが表示されます。
    数本の直線が表示されたら完成です。

【演習】

  1. ページ先頭の螺旋模様を描いて下さい。
          case WM_PAINT:
               hdc = BeginPaint(hWnd, &ps);
               // TODO: 描画コードをここに追加してください...
               int i,x,y,len;
               x= 50;
               y= 20;
               MoveToEx(hdc,x,y,NULL);      // 開始点に移動
               for(i=0; i<50; i++)
               {
                   len= 300-i*5;
                   switch(i%4)
                   {
                       現在の座標から上・下・左・右の方向(i%4) に線を描く座標(x,y)を設定します。
                       線の長さは len に格納されています。
                   }
                   LineTo(hdc,x,y);         // 線を描く
               }
               EndPaint(hWnd, &ps);
               break;
        
  2. 上・下・左・右の方向(i%4) に線の座標(x,y)を設定するコードを記述して下さい。
    「x または y」を len の値だけ「増加または減少」させることになります。
  3. ソースコードの説明です。
    ソースコード 説明
    x= 50; y= 20; 螺旋模様の開始点(左上)を格納します
    MoveToEx(hdc,x,y,NULL) 螺旋模様の開始点に移動します
    for(i=0; i<50; i++) 50本の線を描きます
    len= 300-i*5 線の長さは5ずつ短くなります
    switch(i%4) 右・下・左・上の順に線を描きます
    x+= len, y+= len, ... 右・下・左・上の座標を計算します
    LineTo(hdc,x,y) 現在の座標から次の座標に線を引きます

【演習】

  1. ペンの色や線の太さを変えて描いてみて下さい。
    ペンの使い方は Lineto() で直線を描画する を参照して下さい。
  2. ページ先頭右側の画像のように、模様を45度回転させて描いてみて下さい。

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