在我的程序中我有一個內存DC,我頻繁繪製,然後在響應WM_PAINT
我快速BitBlt
它到屏幕上。我一直在做這樣的繪圖,內存DC是根據WM_CREATE
順便創建的。SelectObject對內存DC
void Draw()
{
HFONT hPrevFont = (HFONT)SelectObject(m_hMemDC, m_hFont);
// draw text
SelectObject(m_hMemDC, hPrevFont);
}
這應該是正確的,我現在也發現了,我可以使用該SaveDC
和RestoreDC
void Draw()
{
int nSavedDC = SaveDC(m_hMemDC);
SelectObject(m_hMemDC, m_hFont);
// draw text
RestoreDC(m_hMemDC, nSavedDC);
}
現在我不知道是否(有很多GDI對象時特別有用)可以在創建完成後保存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使用)。
謝謝,所以當我確信這些對象沒有在其他地方使用它沒關係(他們是班級的私人成員,所以沒問題)。我還注意到,在調用DeleteObject時,如果它沒有刪除對象,它並不總是返回零,因爲它仍然被選入DC,非常奇怪。 – demorge