Microsoft Developer Network http://msdn.microsoft.com/en-us/library/dd162487(v=VS.85).aspxからコピーしたコードを次に示します。
LRESULT APIENTRY WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
**PAINTSTRUCT ps;
HDC hdc;**
switch (message)
{
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
TextOut(hdc, 0, 0, "Hello, Windows!", 15);
EndPaint(hwnd, &ps);
return 0L;
// Process other messages.
}
}
私はおそらく間違っていますが、コンパイラーが次のいずれかのようなステートメントを実行するたびに、私は思っていました。
int var1
double var2
char var3[]
PAINTSTRUCT ps
HDC hdc
コンピューターは新しい変数を作成します。少なくとも、新しい変数を作成したいときにそれを書くので、それは考えるのが論理的なことですよね?
また、次のようなコードブロックがあるといつも思っていました。
for(int i = 0; i < 100; i++)
int sum = i;
コンピュータは 100 の異なる変数をすべて同じ名前で作成し、変数sum
に含まれる何らかの値を作成します。i
上記のサンプル コードでは、関数 WndProc がプログラムの過程で何度も呼び出されますが、関数が作成する "ps" と "hdc" という 2 つの変数は、関数が実行されるときにのみ使用されます。 .
では、コンピューターは決して使用しない余分な PAINTSTRUCT 変数と HDC 変数を個別に大量に作成するのでしょうか?
case WM_PAINT: の後に "ps" と "hdc" を宣言すると、少なくとも少しは効率的ではないでしょうか?
case WM_PAINT:
{
**PAINTSTRUCT ps;
HDC hdc;**
hdc = BeginPaint(hwnd, &ps);
TextOut(hdc, 0, 0, "Hello, Windows!", 15);
EndPaint(hwnd, &ps);
}
return 0L;