戻る
グラフィックスプログラマになる 06 (2024/06/12)
変数と座標
"OnPaint" のコードを書き換えてみましょう。
void OnPaint(HDC hdc)
{
  COLORREF color = RGB(255, 0, 0);
  // (1)
  int x = 20;
  int y = 10;
  SetPixel(hdc, x, y, color);
  // (2)
  x = 40;
  y = 20;
  SetPixel(hdc, x, y, color);
  // (3)
  x = x + 2;
  SetPixel(hdc, x, y, color);
  // (4)
  y = y + 5;
  SetPixel(hdc, x, y, color);
  // (5)
  int x2 = x + 2;
  int y2 = y + 2;
  SetPixel(hdc, x2, y2, color);
  // (6)
  SetPixel(hdc, x2+2, y2+2, color);
}
VisualStudio だとこうなると思います。

「ローカル Windows デバッガー」ボタンを押して実行すると、

というウィンドウが現れます。拡大すると、

こんな感じです。上記のソースコードは、SetPixel関数が6回呼ばれています。ウィンドウに描画された赤いドットも6個。描画する座標を変えながら、6回ドットを描画しているわけです。
  // (1)
  int x = 20;
  int y = 10;
  SetPixel(hdc, x, y, color);
まず、これですね。xに20をセット、yに10をセットしています。「型」は「int」であり、整数を表現したい時の型になります。先ほど説明したように、これはつまり、
  // (1)
  SetPixel(hdc, 20, 10, color);
と同じ値を渡していると言えます。20を渡すのと、20がセットされた変数xを関数に渡すのは、同じですからね。これは復習という感じで、良いですよね? そして次。
  // (2)
  x = 40;
  y = 20;
  SetPixel(hdc, x, y, color);
x に 40 をセットし、y に 20 をセットして、SetPixel を呼んでいます。これはつまり、
  // (2)
  SetPixel(hdc, 40, 20, color);
という事ですね。変数は、こんな感じで
値を差し替える(上書きする)ことができます。これも復習ですね。そして次。
  // (3)
  x = x + 2;
  SetPixel(hdc, x, y, color);
これです。今までは x = 数値、で値をセットしていましたが、x = x + 2; と、イコールの右側に変数が出てきます。(2) で、x に 40 がセットされているので、x = 40 + 2; になります。不思議な感じがしますが、
「まずイコールの右側が計算され、その計算結果が左側の変数にセットされている」と納得させてください! そして次。
  // (4)
  y = y + 5;
  SetPixel(hdc, x, y, color);
これも、(3) とほぼ同じですね。y = 20 + 5; なので、y = 25; になります。そして次。
  // (5)
  int x2 = x + 2;
  int y2 = y + 2;
  SetPixel(hdc, x2, y2, color);
x2 という新しい変数に、既存の x という変数に 2 を足した値 (44) をセットしています。
y2 という新しい変数に、既存の y という変数に 2 を足した値 (27) をセットしています。
SetPixel(hdc, 44, 27, color); という事ですね。
これで最後。
  // (6)
  SetPixel(hdc, x2+2, y2+2, color);
SetPixel の x2,y2 座標に「プラス2」された値が渡されます。SetPixel(hdc, 46, 29, color); という事ですね。x2 と y2 の値が変化させたくない時に使いましょう。というわけで、先ほどの点とSetPixelの対応はこうなります。

では次回、デバッガを使って一行一行実行して、xとyの値の変化を見ていきましょう。
(次回へ続く)