Win32API【2】
■ このスレッドは過去ログ倉庫に格納されています
0298デフォルトの名無しさん
NGNG> 無駄は生じないというのは・・・
変数宣言に対して「実行する」とか「何回実行する」という考え方を捨てて下さい。宣言は、ただ宣言するだけであって、何も実行しません。
制御がその部分を通過するかどうか、まったく関係ありません。
> 最適化で消えて無くなる
つまり
const char* str = "abc";
TextOut(hDC,0,0,str,3);
これは
TextOut(hDC, 0, 0, "abc", 3);
になるだろう、ということです。まぁこれに関しては最適化の度合いにも依るんで、一概には言えませんが。
んで、ですね。本題(なのか?)に入ると、
> case WM_CREATE:
> HDC hDC;
> PAINTSTRUCT ps;
> char *str = "abc";
> break;
> case WM_PAINT:
> hDC = BeginPaint(hWnd, &ps);
> TextOut(hDC,0,0,str,3);
> EndPaint(hWnd, &ps);
> break;
これですが、ダメです。
str は WM_CREATE を最初に通ったときに "abc" で初期化されますが、関数 WndProc を抜けたときに消え去ります。
次に WndProc に来たときには、str は前の値を覚えていません。
WM_PAINT を受け取ると、switch-caseのジャンプで飛び越されるため str は初期化されずゴミ値になります。
■ このスレッドは過去ログ倉庫に格納されています