我正在使用CClientDC
对象,该对象充当函数GetDC
和ReleaseDC
的包装器:
GetDC
构造函数CClientDC
ReleaseDC
析构函数CClientDC
在两者之间,我操纵DC(更换笔,画笔等)。
但我很确定CClientDC
对象不会将DC恢复到之前的状态。
这意味着我必须自己确认。这是对的吗?
谢谢。
答案 0 :(得分:3)
从MFC源代码中打开wingdi.cpp
并查找CClientDC
的实现:
CClientDC::~CClientDC()
{
ASSERT(m_hDC != NULL);
::ReleaseDC(m_hWnd, Detach());
}
您看到它只调用ReleaseDC
,不将DC恢复到之前的状态。 CClientDC
无法知道您更改了哪些GDI对象。
如果要保存和恢复DC的状态,可以使用以下特殊方法:CDC::SaveDC
和CDC::RestoreDC
。这些不是从CDC
或CClientDC
自动调用的 - 您需要自己手动调用它们。
或者,您可以保存和还原您修改的每个GDI对象。当您调用SelectObject
时,将返回原始对象。保存它,并在取消选择正在使用的对象时恢复它。