#ifndef _MEMDC_H_
#define _MEMDC_H_
class CMemDC: public CDC {
private:
CBitmap m_bitmap;
CBitmap* m_oldBitmap;
CDC* m_pDC;
CRect m_rect;
BOOL m_bMemDC;
public:
CMemDC(CDC* pDC, const CRect* pRect = NULL, bool boolToMemory = TRUE): CDC() {
ASSERT(pDC != NULL);
m_pDC = pDC;
m_oldBitmap = NULL;
if (boolToMemory) m_bMemDC = !pDC->IsPrinting();
else m_bMemDC = FALSE;
if (pRect == NULL) pDC->GetClipBox(&m_rect);
else m_rect = *pRect;
if (m_bMemDC) {
CreateCompatibleDC(pDC);
pDC->LPtoDP(&m_rect);
m_bitmap.CreateCompatibleBitmap(pDC, m_rect.Width(), m_rect.Height());
m_oldBitmap = SelectObject(&m_bitmap);
SetMapMode(pDC->GetMapMode());
SetWindowOrg(m_rect.left, m_rect.top);
} else {
if(pDC->IsPrinting()) m_bPrinting = pDC->m_bPrinting;
m_hDC = pDC->m_hDC;
m_hAttribDC = pDC->m_hAttribDC;
}
FillSolidRect(m_rect, pDC->GetBkColor());
}
~CMemDC() {
if(m_bMemDC) {
m_pDC->BitBlt(m_rect.left, m_rect.top, m_rect.Width(), m_rect.Height(), this, m_rect.left, m_rect.top, SRCCOPY);
SelectObject(m_oldBitmap);
} else {
m_hDC = m_hAttribDC = NULL;
}
}
CMemDC* operator->() {
return this;
}
operator CMemDC* () {
return this;
}
};
#endif
CMemDC类只赏不析
于 2013-02-07 21:46:17 首次发布