単二電池

いつもお世話になります。
縦縞の四角形を表示するプログラムですが、ある一定の四角形を描画すると四角形の中の縦縞がなくなり、白色になります。
原因が分かりません。アドバイスをお願い致します。
(四角形をマウスドラッグ中に小さくすると黒い線がたくさんでてきますが、これはアプリケーションの仕様です)

プロシージャソースは以下の通り。
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
HDC hDC;
PAINTSTRUCT ps;
static POINT start, end;
static bool push;

switch(msg)
{
case WM_CREATE:
push = false;
break;

case WM_LBUTTONDOWN:
start.x = LOWORD(lParam);
start.y = HIWORD(lParam);
push = true;
break;

case WM_MOUSEMOVE:
if(push){
end.x = LOWORD(lParam);
end.y = HIWORD(lParam);
InvalidateRect(hWnd, NULL, FALSE);
}
break;

case WM_LBUTTONUP:
end.x = LOWORD(lParam);
end.y = HIWORD(lParam);
push = false;
InvalidateRect(hWnd, NULL, FALSE);
break;

case WM_PAINT:
HBRUSH hBrush;
hDC = BeginPaint(hWnd, &ps);
hBrush = CreateHatchBrush(HS_VERTICAL, RGB(255, 0, 0));
SelectObject(hDC, hBrush);
Rectangle(hDC, start.x, start.y, end.x, end.y);
DeleteObject(hBrush);
EndPaint(hWnd, &ps);
break;

case WM_DESTROY:
PostQuitMessage(0);
break;
}

return DefWindowProc(hWnd, msg, wParam, lParam);
}

よろしくお願い致します。

A 回答 (1件)

SelectObjectしたままDeleteObjectした場合ってきれいに破棄されましたっけ?


ここでリソースリークしたせいで、最終的にブラシの生成ができないのかも。

hSukebe=SelectObject(hDC, hBrush);
Rectangle(hDC, start.x, start.y, end.x, end.y);
SelectObject(hDC, hSukebe);
DeleteObject(hBrush);

こんなのでどうかな?
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
おっしゃられた通り、SelectObjectでもとの設定に戻してDeleteObjectしたら上手くいきました。

お礼日時:2008/10/18 14:17

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