【发布时间】:2015-02-09 22:30:50
【问题描述】:
我是否总是需要调用 SelectObject 将原始对象恢复到 DC(并使我的对象可用于删除),即使我将要删除 DC...?
例如
// Create DC
HBITMAP hBitmap = CreateCompatibleBitmap (hDC, rect.Width(), rect.Height());
HGDIOBJ hOldBitmap = SelectObject(hMemDC, hBitmap);
// ... Do some other stuff with the DC
// DO I NEED THIS LINE HERE???
SelectObject(hMemDC, hOldBitmap);
// Tidy up
DeleteDC(hMemDC);
DeleteObject(hBitmap); // This DOES return TRUE even without the SelectObject line...
“DeleteDC”是否会自动取消选择其中选定的对象,以便在删除 DC 后可以删除它们?
谢谢
【问题讨论】:
-
当然。这并不能防止您的代码泄漏 hOldBitmap。
-
我假设它为 NULL,因为我已经创建了 DC,而我的 hBitmap 是我选择的第一个(唯一)位图。将其选回 DC 的唯一原因是确保未将 hBitmap 选入 DC,因此可以将其删除……但您是说没有必要这样做。谢谢!
-
“我假设它是 NULL。”你确定这是一个安全的假设吗?
-
DC 在创建时会获得默认的 1x1x1 位图。如果你不把它放回去,这个会泄漏。
-
@Jonathan - 谢谢,知道这很有用。还有吉姆 - 不,看起来这不是一个安全的假设......!
标签: winapi