マウスの左ボタンが押された場所にビットマップを表示する簡単なウィンドウプログラムを作成します。初めてマウスの左ボタンをクリックすると、ビットマップが表示されます。しかし、2回目の言葉では、マウスを左クリックした場所にビットマップが表示されません。ここでWindows C:LoadBitmap()関数が機能していません
は、コードが日曜日から7種類の方法について間違っている
LRESULT CALLBACK myHandler(HWND hw, UINT m, UINT mextra, long co_ord)
{
HDC hdc, hmemdc;
PAINTSTRUCT ps;
HBITMAP hbmp;
RECT r;
HGDIOBJ holdbmp;
int x, y;
switch(m)
{
case WM_LBUTTONDOWN:
hdc = BeginPaint(hw,&ps);
hmemdc = CreateCompatibleDC(hdc);
hbmp = LoadBitmap(h, MAKEINTRESOURCE(IDB_BITMAP1));
holdbmp = SelectObject(hmemdc, hbmp);
x = LOWORD(co_ord);
y = HIWORD(co_ord);
BitBlt(hdc, x, y, 190, 220, hmemdc, 0, 0, SRCCOPY);
EndPaint(hw,&ps);
SelectObject(hmemdc, holdbmp);
DeleteObject(hbmp);
DeleteDC(hmemdc);
DeleteDC(hdc);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hw,m,mextra,co_ord);
}
return 0L;
}
'DeleteDC(hdc);'はまったく存在してはいけません。 'BeginPaint'から返されたDCのデバイスコンテクストのクリーンアップはあなたが既に呼び出した' EndPaint'によって管理されます。さらに重要なことに、 'BeginPaint' /' EndPaint'は 'WM_PAINT'への応答でない限り*呼び出されるべきではありません。 – WhozCraig
Thank You WhozCraig、BeginPaint()、EndPaint()、DeleteDC()を削除しました。代わりにGetDC()関数を使用しました。私は働いています.... – Sai
覚えておいてください:あなたが 'Get'と' Delete'をあなたが '作成する'あなたのケースでは、 'GetDC'がクライアントDCを取得するならば、それを終了したときに結果として生じる「ReleaseDC」を含む。がんばろう。 – WhozCraig