私のプログラムには、頻繁に描画するメモリ 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によって引き続き使用されるため)。