www.pudn.com > WinGOS.rar > DC.h


#ifndef _GOS_DC_H_ 
#define _GOS_DC_H_ 
 
enum _tagDC 
{ 
	DT_GETCARETPOS		=0x0010, 
	DT_GETCARETINDEX	=0x0020, 
	DT_CALCRECT			=0x0030, 
 
	DT_MULTILINE		=0x0100, 
	DT_FILLFULLRECT		=0x0200, 
	DT_WORDBREAK		=0x0300, 
	DT_UNDERLINE		=0x0400, 
	DT_STRIKELINE		=0x0800, 
 
	DT_LEFT				=0x1000, 
	DT_RIGHT			=0x2000, 
	DT_CENTER			=0x3000, 
	DT_TOP				=0x4000, 
	DT_BOTTOM			=0x8000, 
	DT_VCENTER			=0xC000, 
 
	DrawTextGrowRow=63, 
}; 
 
typedef struct _tagDCDTROW 
{ 
	LPCTSTR pStr; 
	LPCTSTR pEnd; 
	SIZE size; 
}DCDTROW,*PDCDTROW; 
 
class CWnd; 
class CDisplay; 
class CScrollBar; 
class CDC 
{ 
public: 
	//绘图函数 
	void SetPixel(POINT pt,COLORREF clr); 
	void MoveTo(POINT pt){m_ptPos=pt;} 
	void LineTo(POINT pt){PrvLine(m_ptPos,pt);} 
	void FillSolidRect(LPCRECT pRect,COLORREF clr); 
	void FillRect(LPCRECT pRect); 
	void Rectangle(LPCRECT pRect); 
	void Ellipse(LPCRECT pRect); 
	void Polyline(PPOINT pPoints,int nCount); 
	void Polygon(PPOINT pPoints,int nCount); 
	void DrawRect(LPCRECT pRect,COLORREF crColor,int nPenStyle=PS_SOLID); 
	void DrawFocusRect(LPCRECT pRect,COLORREF crColor) 
		{ DrawRect(pRect,crColor,PS_DOT); } 
	void Draw3dRect(LPCRECT lpRect,COLORREF clrTopLeft,COLORREF clrBottomRight); 
	void BitBlt(CDC* pSrcDC,DWORD dwRop) 
		{ BitBlt(pSrcDC->m_rclClip,pSrcDC->m_pBitmap,NULL,dwRop); } 
	void BitBlt(LPCRECT pDestRect,CBitmap* pBitmap,LPCRECT pSrcRect,DWORD nRop); 
	 
	//文字处理 
	int DrawText(const CString& str,LPCRECT pRect,UINT nFormat) 
		{ return DrawText(LPCTSTR(str),str.GetLength(),pRect,nFormat); } 
	int DrawText(LPCTSTR pszString,LPCRECT pRect,UINT nFormat) 
		{ return DrawText(pszString,strlen(pszString),pRect,nFormat); } 
	int DrawText(CWnd* pWnd,LPCRECT pRect,UINT nFormat); 
	int DrawText(LPCTSTR pszString,int nCount,LPCRECT pRect,UINT nFormat); 
	CSize GetTextExtent(const CString& str) 
		{ return GetTextExtent(LPCTSTR(str),str.GetLength());} 
	CSize GetTextExtent(LPCTSTR pszString,int nCount); 
 
	//绘图属性 
	CBitmap* SelectObject(CBitmap* pBitmap) 
		{ CBitmap* pOld=m_pBitmap; m_pBitmap=pBitmap; 
			m_rop.SelectObject(pBitmap);return pOld; } 
	CPalette* SelectObject(CPalette* pPalette) 
		{ CPalette* pOld=m_pPalette;m_pPalette=pPalette;return pOld; } 
	CPen* SelectObject(CPen* pPen) 
		{ CPen* pOld=m_pPen;m_pPen=pPen;return pOld; } 
	CBrush* SelectObject(CBrush* pBrush) 
		{ CBrush* pOld=m_pBrush;m_pBrush=pBrush;return pOld; } 
	CFont* SelectObject(CFont* pFont) 
		{ CFont* pOld=m_pFont; m_pFont=pFont; return pOld; } 
	COLORREF SetTextColor(COLORREF crColor) 
		{ COLORREF nOld=m_nTextColor; m_nTextColor=crColor; return nOld; } 
	COLORREF SetBkColor(COLORREF crColor) 
		{ COLORREF nOld=m_nBkColor; m_nBkColor=crColor; return nOld; } 
	int SetROP2(int nDrawMode) 
		{int nOld=m_nDrawMode;m_nDrawMode=nDrawMode;return nOld; } 
	CBitmap* GetCurrentBitmap(){return m_pBitmap;} 
	CPalette* GetCurrentPalette(){return m_pPalette;} 
	CPen* GetCurrentPen(){return m_pPen;} 
	CBrush* GetCurrentBrush(){return m_pBrush;} 
	COLORREF GetTextColor(){return m_nTextColor;} 
	COLORREF GetBkColor(){return m_nBkColor;} 
	int GetROP2(){return m_nDrawMode;} 
	CROP& GetRopObj(){return m_rop;} 
	void SetOrg(POINT pt){m_ptOrg=pt;} 
	CPoint GetOrg(){return m_ptOrg;} 
	void SetClipRect(LPCRECT pRect){m_rclClip=*pRect;}; 
	void GetClipRect(LPRECT pRect){*pRect=m_rclClip;} 
	POINT GetCurrentPosition(){return m_ptPos;} 
	//构建 
	CDC(void); 
private: 
	void PrvLine(POINT pt1,POINT pt2); 
	void PrvLineV(int x,int y1,int y2); 
	void PrvLineH(int y,int x1,int x2); 
	void PrvLineI(POINT pt1,POINT pt2); 
	void PrvFillEllipse(LPCRECT pRect); 
	void PrvFillText(CRect& rect,LPCTSTR pszString,LPCTSTR pszStrEnd); 
	void PrvDrawText(CRect& rect,LPCTSTR pszString,LPCTSTR pszStrEnd,UINT nFormat); 
	void PrvCalcText(DCDTROW& dr,int nWidth,UINT nFormat); 
	int PrvTextWidth(LPCTSTR pszString,LPCTSTR pszStrEnd,int nFontSize); 
	static void PrvPolygon(POINT pt1,POINT pt2,int y,int* pMinX,int* pMaxX); 
private: 
	//data members 
	CROP m_rop; 
	CPoint m_ptOrg; 
	CPoint m_ptPos; 
	CRect m_rclClip; 
	COLORREF m_nTextColor; 
	COLORREF m_nBkColor; 
	DWORD m_nDrawMode; 
	CPalette* m_pPalette; 
	CBitmap* m_pBitmap; 
	CPen* m_pPen; 
	CBrush* m_pBrush; 
	CFont* m_pFont; 
}; 
 
typedef CDC* PDC; 
 
#endif _GOS_DC_H_