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


#ifndef _GOS_GIDOBJECT_H_ 
#define _GOS_GIDOBJECT_H_ 
 
#define RGB(r,g,b) (DWORD(r)|(DWORD(g)<<8)|(DWORD(b)<<16)) 
#define RGBA(r,g,b,a) (RGB(r,g,b)|DWORD(a<<24)) 
#define CLR_NONE 0xFFFFFFFEL 
 
#define GETBMPWIDTHBYTES(wb,w,bpp) wb=(w)<0?-(w):(w);wb*=bpp;wb=((wb+31)>>5)<<2 
#define GETBMPBITSBYTES(wb,w,h,bpp) GETBMPWIDTHBYTES(wb,w,bpp);wb*=(h)<0?-(h):(h) 
#define MAKEBMPTYPE(rs,rw,gs,gw,bs,bw) ((rs)|((rw)<<5)|((gs)<<10)|((gw)<<15)|((bs)<<20)|((bw)<<25)) 
 
enum _tagGdiObject 
{ 
	BMP_OWNBUFFER=0x80000000, 
	BMP_TYPEMASK=0x7fffffff, 
	BMP_TYPEVER2=0x40000000, 
	BMP_TYPE888=MAKEBMPTYPE(16,8,8,8,0,8), 
	BMP_TYPE565=MAKEBMPTYPE(11,5,5,6,0,5), 
	BMP_TYPE555=MAKEBMPTYPE(10,5,5,5,0,5), 
	BMP_TYPE332=MAKEBMPTYPE(5,3,2,3,0,2), 
	BMP_TYPE32=BMP_TYPEVER2|BMP_TYPE888, 
	BMP_TYPE24=BMP_TYPE888, 
	BMP_TYPE8=BMP_TYPE332, 
	BMP_TYPE4=BMP_TYPEVER2|0x20000000, 
	BMP_TYPE1=BMP_TYPEVER2|0x10000000, 
 
	PS_NULL=0, 
	PS_SOLID=0xffffffff, 
	PS_DASH=0x7777777, 
	PS_DOT=0x55555555, 
	PS_DASHDOT=0x75757575, 
	PS_DASHDOTDOT=0x77557755, 
 
	HS_NULL=0, 
	HS_SOLID=-1, 
	HS_DOT=0xAA55AA55, 
	HS_BDIAGONAL=0x11224488, 
	HS_CROSS=0x11FF1111, 
	HS_FDIAGONAL=0x88442211, 
	HS_HORIZONTAL=0x00FF0000, 
	HS_VERTICAL=0x11111111, 
	HS_VWAVE=0x22442211, 
	HS_HWAVE=0x66990000, 
}; 
 
typedef struct _tagBITMAP{ 
	LONG bmType; 
	LONG bmWidth; 
	LONG bmHeight; 
	PRGBQUAD bmClrTable; 
	SHORT bmClrUsed; 
	SHORT bmBitsPixel; 
	LPVOID bmBits; 
}BITMAP, *PBITMAP; 
 
typedef struct _tagBITMAPFILEHEADER{ 
	WORD bfType; 
	WORD bfSizeL; 
	WORD bfSizeH; 
	WORD bfReserved1; 
	WORD bfReserved2; 
	WORD bfOffBitsL; 
	WORD bfOffBitsH; 
}BITMAPFILEHEADER, *PBITMAPFILEHEADER; 
 
typedef struct _tagBITMAPINFOHEADER{ 
	DWORD biSize; 
	LONG biWidth; 
	LONG biHeight; 
	WORD biPlanes; 
	WORD biBitCount; 
	DWORD biCompression; 
	DWORD biSizeImage; 
	LONG biXPelsPerMeter; 
	LONG biYPelsPerMeter; 
	DWORD biClrUsed; 
	DWORD biClrImportant; 
}BITMAPINFOHEADER, *PBITMAPINFOHEADER; 
 
class CDC; 
class CROP; 
class CPalette; 
class CCharSet; 
class CFontFace; 
 
class CBitmap 
{ 
public: 
	BOOL CreateBitmap(PBITMAPFILEHEADER pFile,CDC* pCompatible=NULL); 
	BOOL CreateBitmap(LPCTSTR pszFileName,CDC* pCompatible=NULL); 
	BOOL CreateBitmap(int nWidth,int nHeight,CDC* pCompatible); 
	BOOL CreateBitmap(int nWidth,int nHeight,CBitmap* pCompatible); 
	BOOL CreateBitmap(int nWidth,int nHeight,int nBitcount); 
	void CreateBitmap(int nWidth,int nHeight,int nBitcount,LPVOID pBits); 
	void CopyBitmap(CBitmap* pSrcBitmap); 
	void DeleteObject(); 
	CPalette* GetPalette() 
	{ 
		if(m_bmp.bmClrUsed>=0)return NULL; 
		return (CPalette*)&m_bmp.bmClrTable; 
	} 
	CSize GetSize() 
	{ 
		CSize size; 
		size.cx=m_bmp.bmWidth<0?-m_bmp.bmWidth:m_bmp.bmWidth; 
		size.cy=m_bmp.bmHeight<0?-m_bmp.bmHeight:m_bmp.bmHeight; 
		return size; 
	} 
	const BITMAP& GetBitmap(){return m_bmp;} 
	CBitmap(void){m_bmp.bmBits=NULL;} 
	~CBitmap(void){DeleteObject();} 
private: 
	BITMAP m_bmp; 
}; 
 
class CPalette 
{ 
public: 
	CPalette(){m_pTable=NULL;} 
	~CPalette(){free(m_pTable);} 
	BOOL CreatePalette(CDC* pCompatile,CBitmap* pBitmap); 
	BOOL CreatePalette(CDC* pCompatile,PRGBQUAD pColorTable,int nCount); 
	BOOL CreatePalette(CDC* pCompatile,PCOLORREF pColorTable,int nCount); 
	void DeleteObject() 
		{ free(m_pTable);m_pTable=NULL; } 
	PDWORD GetTable() 
		{ return m_pTable; } 
	int GetSize() 
		{ return _msize(m_pTable)>>2; } 
private: 
	PDWORD m_pTable; 
}; 
 
class CPen 
{ 
public:	 
	CPen(){m_nStyle=0;} 
	CPen(CBitmap* pBitmap) 
		{ CreatePen(pBitmap); } 
	CPen(int nStyle,int nWidth,COLORREF crColor) 
		{ CreatePen(nStyle,nWidth,crColor); } 
	void CreatePen(CBitmap* pBitmap) 
	{ 
		m_nStyle=-1; 
		m_crColor=COLORREF(pBitmap); 
	} 
	void CreatePen(int nStyle,int nWidth,COLORREF crColor) 
	{ 
		m_nStyle=nStyle; 
		m_nWidth=nWidth; 
		m_crColor=crColor; 
	} 
public: 
	int m_nStyle; 
	int m_nWidth; 
	COLORREF m_crColor; 
}; 
 
class CBrush 
{ 
public:	 
	CBrush() 
		{ m_nStyle=0; m_crColor=0; } 
	CBrush(CBitmap* pBitmap) 
		{ CreateBrush(pBitmap); } 
	CBrush(int nStyle,COLORREF crColor) 
		{ CreateBrush(nStyle,crColor); } 
	void CreateBrush(CBitmap* pBitmap) 
	{ 
		m_nStyle=-1; 
		m_crColor=COLORREF(pBitmap); 
	} 
	void CreateBrush(int nStyle,COLORREF crColor) 
	{ 
		m_nStyle=nStyle; 
		m_crColor=crColor; 
	} 
public: 
	int m_nStyle; 
	COLORREF m_crColor; 
}; 
 
class CFont 
{ 
public: 
	BOOL CreateFont(int nSize) 
		{ return CreateFont(NULL,NULL,nSize); } 
	BOOL CreateFont(CFontFace* pFontFace,int nSize) 
		{ return CreateFont(NULL,pFontFace,nSize); } 
	BOOL CreateFont(CCharSet* pCharSet,CFontFace* pFontFace,int nSize); 
public: 
	CCharSet* m_pCharSet; 
	CFontFace* m_pFontFace; 
	int m_nSize; 
}; 
 
#endif //_GOS_GIDOBJECT_H_