こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

なぜCreateHatchBushの設定が途中で喪失するのか

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

プロシージャソースは以下の通り。
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);
}

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

投稿日時 - 2008-10-18 14:01:45

QNo.4410607

困ってます

質問者が選んだベストアンサー

SelectObjectしたままDeleteObjectした場合ってきれいに破棄されましたっけ?
ここでリソースリークしたせいで、最終的にブラシの生成ができないのかも。

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

こんなのでどうかな?

投稿日時 - 2008-10-18 14:09:33

お礼

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

投稿日時 - 2008-10-18 14:17:18

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)