戻る
グラフィックスプログラマになる 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の値の変化を見ていきましょう。
(次回へ続く)