[레밍즈프로젝트]에서 사용하게 될 그리기 클래스. TODO. 출력 인터페이스로 상속 받아오기 TODO. 비트맵 정렬 상태 조정 마무리 ---- {{{~cpp #define BITMAP_OPT_HREVERSE 1 #define BITMAP_OPT_VREVERSE 2 #define BITMAP_OPT_HALIGN_CENTER 3 #define BITMAP_OPT_VALIGN_CENTER 4 class CmyDouBuffDC { private: CRect m_rt; CDC* m_pDC; CDC* m_pMemDC; CBitmap m_bmp; //Bitmap Draw Option int m_Vreverse; int m_Hreverse; float m_Valign; float m_Halign; void init(){ resetBmpOpt(); } public: CmyDouBuffDC(CDC *pDC, CRect rt){ init(); m_rt = rt; m_pDC = pDC; m_pMemDC = new CDC(); m_pMemDC->CreateCompatibleDC(m_pDC); m_bmp.CreateCompatibleBitmap(m_pDC, m_rt.Width(), m_rt.Height()); m_pMemDC->SelectObject(&m_bmp); m_pMemDC->Rectangle(0, 0, m_rt.Width(), m_rt.Height()); } ~CmyDouBuffDC(void){ m_pDC->BitBlt(0, 0, m_rt.Width(), m_rt.Height(), m_pMemDC, 0, 0, SRCCOPY); m_pMemDC->DeleteDC(); m_bmp.DeleteObject(); delete m_pMemDC; } CDC* getpMemDC(){return m_pMemDC;} void DrawBmp(UINT ITEM, int x, int y, int kRop=SRCCOPY){ //Load CDC BitMapDC; BitMapDC.CreateCompatibleDC(m_pMemDC); CBitmap newBitmap, *oldBitmap; newBitmap.LoadBitmap(ITEM); oldBitmap = (CBitmap*)BitMapDC.SelectObject(&newBitmap); BITMAP m_bitmapInfo; newBitmap.GetBitmap(&m_bitmapInfo); m_pMemDC->StretchBlt(x-m_bitmapInfo.bmWidth*m_Halign, y-m_bitmapInfo.bmHeight*m_Valign, (m_bitmapInfo.bmWidth)*m_Hreverse, (m_bitmapInfo.bmHeight)*m_Vreverse, &BitMapDC, 0, 0, m_bitmapInfo.bmWidth, m_bitmapInfo.bmHeight, kRop); //회복 BitMapDC.SelectObject(oldBitmap); newBitmap.DeleteObject(); } void setBmpOpt(int kBitMapOption){ switch(kBitMapOption){ case BITMAP_OPT_VALIGN_CENTER: m_Valign = 0.5; break; case BITMAP_OPT_HALIGN_CENTER: m_Halign = 0.5; break; case BITMAP_OPT_HREVERSE: m_Hreverse = -1; break; case BITMAP_OPT_VREVERSE: m_Vreverse = -1; break; } } void resetBmpOpt(){ m_Vreverse=1; m_Hreverse=1; m_Valign=0; m_Halign=0; } void DrawMaskBmp(UINT MASKITEM, UINT IMGITEM, int x, int y){ this->DrawBmp(MASKITEM, x, y, SRCAND); this->DrawBmp(IMGITEM, x, y, SRCPAINT); return; } }; }}}