假设我创建的内存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后(在任何绘画之前)删除windc是合适的。
重要 - 呼叫ReleaseDC为以GetWindowDC相应的呼叫。 (在你的代码中,你正在调用DeleteDC)。仅为您自己创建的DC调用DeleteDC(例如,CreateCompatibleDC)。 – selbie