// In XXX.h
class XXX {
...
CDC m_memDC;
CBitmap m_bitmap;
...
};
// In XXX.cpp
void XXX::OnPaint()
{
CPaintDC dc(this); // device context for painting
CBitmap *pOldBitmap;
CRect rc;
GetClientRect(&rc);
if (!m_memDC.GetSafeHdc())
{
m_memDC.CreateCompatibleDC(&dc);
if (m_bitmap.GetSafeHandle()) {
m_bitmap.DeleteObject();
}
m_bitmap.CreateCompatibleBitmap(&dc, rc.Width(), rc.Height());
}
pOldBitmap = m_memDC.SelectObject(&m_bitmap);
// Draw using memory dc
Draw(&_memDC);
dc.BitBlt(0, 0, rc.Width(), rc.Height(), &m_memDC, 0, 0, SRCCOPY);
m_memDC.SelectObject(pOldBitmap);
}
필요에 따라 다음과 같이 크기 변경되었을 때 삭제하고 OnPaint함수에서 다시 만들어서 사용하도록 하는 방법도 있겠다.
// In XXX.cpp : Delete memory dc and bitmap to re-make
void XXX::OnSize(UINT nType, int cx, int cy)
{
...
m_memDC.DeleteDC();
m_bitmap.DeleteObject();
...
}
'Windows' 카테고리의 다른 글
[VisualStudio] stl::map insert vs operator[]. Which is faster? (0) | 2016.06.22 |
---|---|
VC6 Static control double click 처리하기 (0) | 2016.06.22 |
[MFC] Draw Text (0) | 2016.05.27 |
MFC, Popup context menu (0) | 2016.05.11 |
Virtual list control (리스트 아이템 가상화?) (0) | 2016.04.21 |