どこで、いつ、ビットマップを削除するには、私の質問はありますか?私は、メモリDCにビットマップを処理する機能を作成すると仮定し、(Windows)オブジェクトとデバイスのコンテキストをいつ削除しますか?
HBITMAP paint (HWND hwnd)
{
HDC windc = ::GetWindowDC(hwnd);
HDC memdc = ::CreateCompatibleDC(windc);
HBITMAP bitmap = ::CreateCompatibleBitmap(windc,100,100); //Don't bother with the height and width
::SelectObject(memdc,(HGDIOBJ)bitmap);
/* DeleteDC(windc) here? */
//do the painting
//...
//painting done
/*DeleteDC(memdc) here? */
return bitmap;
/* Code does not reach here */
/* So where do I put DeleteObject(bitmap)? */
}
それを返しますかまた、windcを削除するとmemdcに影響しますか?またはmemdcは純粋に作成されています(そして、windcに "ポイント"する情報は含まれていません)。それが本当であれば、ビットマップとmemdcが作成された後で(絵の前に)ウィンカーを削除することが適切です。
重要 - GetWindowDCに対応するコールのためReleaseDCのを呼び出します。
あなたはこのような何かをしなければなりません。 (上のコードでは、DeleteDCを呼び出しています)。自分で作成したDC(CreateCompatibleDCなど)に対してのみDeleteDCを呼び出します。 – selbie