プロが教える店舗&オフィスのセキュリティ対策術

Run-Time Check Failure #3 - The variable 'hMemDC' is being used without being defined.
というエラーが出ます。
自分としては、WM_CREATEの処理で、初期化を行っているつもりなのですが・・・
力を貸して頂ければ有難いです。よろしくお願いします。
ちなみに、関係のありそうな部分だけ掲載しています。
この部分だけ残して、他の部分をコメントアウトしてコンパイルしても、同じエラーメッセージが出ました。

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
RECT rect;

HDC hDC; PAINTSTRUCT ps;
HDC hMemDC; HBITMAP hMemBmp;
HDC hMjDC; HBITMAP hMjBmp; BITMAP MjBmp;

/*POINT posMJ;
int MJshot; POINT posMJshot;*/

switch (message)
{
case WM_CREATE:
GetClientRect(hWnd, &rect);// クライアント領域の大きさをrectに格納

hDC = GetDC(hWnd);

hMemDC = CreateCompatibleDC(hDC);// hDCと互換性をとるメモリデバイスコンテキストhMemDCを構築
hMemBmp = CreateCompatibleBitmap(hMemDC, rect.right, rect.bottom);

hMjDC = CreateCompatibleDC(hMemDC);// hMemDCと互換性をとるメモリデバイスコンテキストhMjDCを構築
hMjBmp = (HBITMAP)LoadImage(// ビットマップイメージMYJET(リソース)をhMjBmpに設定
(HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
MAKEINTRESOURCE(IDB_MYJET), IMAGE_BITMAP,
0, 0, LR_DEFAULTCOLOR
);

SetTimer(hWnd, 1, 10, NULL);// 100分の1秒毎にWM_TIMERメッセージを送るタイマー1をセット
break;

case WM_PAINT:
hDC = BeginPaint(hWnd, &ps);// hDCにディスプレイのデバイスコンテキストのハンドルを格納
BitBlt(// hDCにバックバッファhMemDCを転送
hDC, 0, 0, rect.right, rect.bottom,
hMemDC, 0, 0, SRCCOPY
);
EndPaint(hWnd, &ps);
break;

A 回答 (1件)

> Run-Time Check Failure #3 - The variable 'hMemDC' is being used without being defined


> WM_CREATEの処理で、初期化を行っているつもりなのですが・・・

hMemDCは、関数「WndProc」内のローカル変数ですから、
一旦「WndProc」を抜けると、破棄されてしまうのでは?
    • good
    • 0
この回答へのお礼

なるほど。有難う御座います。
こういったプログラミングは初めてなもんで、そういったことは思いもよりませんでした。
ちなみにどのような対処をすれば、コンパイルが受け入れられるでしょうか?
それとも、構造的に無理があるんでしょうか?

お礼日時:2007/06/16 18:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!