새 파일 |
| | |
| | | |
| | | #pragma once |
| | | |
| | | |
| | | class CakMemDC : public CDC |
| | | { |
| | | public: |
| | | |
| | | CakMemDC(CDC* pDC, CRect rectDC) : CDC() |
| | | { |
| | | ASSERT(pDC != NULL); |
| | | |
| | | m_pDC = pDC; |
| | | m_pOldBitmap = NULL; |
| | | m_bMemDC = false; |
| | | m_hDC = NULL; |
| | | if(pDC == NULL) |
| | | { |
| | | CreateCompatibleDC(pDC); |
| | | return; |
| | | } |
| | | |
| | | #ifndef WCE_NO_PRINTING |
| | | m_bMemDC = !pDC->IsPrinting(); |
| | | #else |
| | | m_bMemDC = FALSE; |
| | | #endif |
| | | |
| | | if (m_bMemDC) |
| | | { |
| | | //pDC->GetClipBox(&m_rect); |
| | | m_rect = rectDC; |
| | | CreateCompatibleDC(pDC); |
| | | m_bitmap.CreateCompatibleBitmap(pDC, m_rect.Width(), m_rect.Height()); |
| | | m_pOldBitmap = SelectObject(&m_bitmap); |
| | | #ifndef _WIN32_WCE |
| | | //SetWindowOrg(m_rect.left, m_rect.top); |
| | | SetWindowOrg(0,0); |
| | | #endif |
| | | FillSolidRect(m_rect, pDC->GetBkColor()); |
| | | } |
| | | else |
| | | { |
| | | #ifndef WCE_NO_PRINTING |
| | | m_bPrinting = pDC->m_bPrinting; |
| | | #endif |
| | | m_hDC = pDC->m_hDC; |
| | | m_hAttribDC = pDC->m_hAttribDC; |
| | | } |
| | | |
| | | } |
| | | |
| | | virtual ~CakMemDC() |
| | | { |
| | | if (m_bMemDC) |
| | | { |
| | | m_pDC->BitBlt(m_rect.left, m_rect.top, m_rect.right, m_rect.bottom, |
| | | this, m_rect.left, m_rect.top, SRCCOPY); |
| | | |
| | | |
| | | SelectObject(m_pOldBitmap); |
| | | //DeleteDC(); |
| | | //m_bitmap.DeleteObject(); |
| | | |
| | | } |
| | | else |
| | | { |
| | | m_hDC = m_hAttribDC = NULL; |
| | | } |
| | | } |
| | | |
| | | CakMemDC* operator->() |
| | | { |
| | | return this; |
| | | } |
| | | |
| | | operator CakMemDC*() |
| | | { |
| | | return this; |
| | | } |
| | | |
| | | private: |
| | | CBitmap m_bitmap; // Offscreen bitmap |
| | | CBitmap* m_pOldBitmap; // bitmap originally found in CakMemDC |
| | | CDC* m_pDC; // Saves CDC passed in constructor |
| | | BOOL m_bMemDC; // TRUE if CDC really is a Memory DC. |
| | | public: |
| | | CRect m_rect; // Rectangle of drawing area. |
| | | } |
| | | ; |