在我的程序中,我有一个我经常绘制的内存 DC,然后作为响应,WM_PAINT
我迅速BitBlt
将它显示在屏幕上。我一直都是这样画的,内存DC是为了响应WM_CREATE
btw而创建的。
void Draw()
{
HFONT hPrevFont = (HFONT)SelectObject(m_hMemDC, m_hFont);
// draw text
SelectObject(m_hMemDC, hPrevFont);
}
哪个应该是正确的,我现在也发现我可以使用SaveDC
并且RestoreDC
为此(在拥有大量 GDI 对象时特别有用)
void Draw()
{
int nSavedDC = SaveDC(m_hMemDC);
SelectObject(m_hMemDC, m_hFont);
// draw text
RestoreDC(m_hMemDC, nSavedDC);
}
现在我想知道在我创建它之后只保存DC的状态是否可以,并在我删除它时恢复它。像这样:
int OnCreate(...)
{
m_hMemDC = CreateMemDC();
m_nSavedDC = SaveDC(m_hMemDC);
}
void Draw()
{
SelectObject(m_hMemDC, m_hFont);
// draw text
}
void OnDestroy()
{
RestoreDC(m_hMemDC, m_nSavedDC);
DeleteMemDC(m_hMemDC);
}
我认为这应该没问题,这不像其他人同时使用我的记忆DC。你怎么看?
哎呀,在这种情况下甚至有必要保存和恢复DC吗?
编辑:是的,我确实意识到我应该在删除字体之前先删除内存 DC(因为否则内存 DC 仍会使用它)。