U E D R , A S I H C RSS

레밍즈프로젝트/그리기DC

No older revisions available

No older revisions available



레밍즈프로젝트에서 사용하게 될 그리기 클래스.
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;
	}
};
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:29:22
Processing time 0.0450 sec