www.pudn.com > GameEngine_src.rar > CEasyDraw.h


#ifndef CEasyDraw_h 
#define CEasyDraw_h 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
 
 
#include "CList.h" 
#include "CSurface.h" 
#include  
 
#include  
#include  
 
 
 
 
#define MAKE_COLOR( r, g, b )   (WORD)((( r & 0xf8 ) << 8 ) + ((g & 0xfc) << 3 ) + ((b & 0xf8) >> 3)) 
 
#define MAKE_TEXT_COLOR( r, g, b ) ( r | ((g << 8) & 0xff00) | ((b << 16) & 0xff0000) ) 
 
#define RGBTO565(r,g,b)  (WORD)((( r & 0xf8 ) << 8 ) + ((g & 0xfc) << 3 ) + ((b & 0xf8) >> 3)) 
#define RGBTO555(r,g,b)  (WORD)(((r & 0xf8 ) << 7 ) + ((g & 0xf8) << 2 ) + ((b & 0xf8) >> 3)) 
 
#define GET_R_32( color ) ( ( color >> 16 ) & 0xff ) 
#define GET_G_32( color ) ( ( color >> 8 ) & 0xff ) 
#define GET_B_32( color ) ( color & 0xff ) 
 
#define CHANGE_565_TO_555( w ) (WORD)( ( w >> 1 ) & 0x7fe0 ) + ( w & 0x1f ) 
#define CHANGE_555_TO_565( w ) (WORD)( ( w & 0x7fe0 ) << 1 ) + ( w & 0x1f ) 
 
#define RGB32_TO_565( color ) ( RGBTO565( GET_R_32(color), GET_G_32(color), GET_B_32(color) ) ) 
 
 
const DWORD TEXT_RED = 0xff; 
const DWORD TEXT_GREEN = 0xff00; 
const DWORD TEXT_BLUE = 0xff0000; 
 
enum FILE_TYPE { FT_JPEG, FT_BMP, FT_ECP }; 
 
 
////////////////////////////////////////////////////////////////////// 
//显示模式枚举  目前只支持16位 
////////////////////////////////////////////////////////////////////// 
enum DISPLAY_FORMAT 
{ 
	R5G6B5, 
	R5G5B5, 
	//R8G8B8, 
	//A8R8G8B8, 
}; 
 
 
//*****************************************************CEasyDraw声明***************************************************** 
 
 
////////////////////////////////////////////////////////////////////// 
//DDraw的封装类 
//卢杭威宇创建 
//最后修改:2007/10/20 
////////////////////////////////////////////////////////////////////// 
class CEasyDraw   
{ 
public: 
	CEasyDraw(); 
	virtual ~CEasyDraw(); 
 
	bool Init( HWND hwnd, bool isWindowed, int iW, int iH ); 
	void Free(); 
	bool Present(); 
	bool IsLost(); 
	void Clear( DWORD color ); 
	 
	void UpdateRect(); 
	void SetDisplayRect( const RECT *pRect );  
 
	LPDIRECTDRAW7 GetLPDD(){ return m_lpDD; } 
 
	LPDIRECTDRAWSURFACE7 GetPrimarySurface(){ return m_lpDDSPrimary; } 
	LPDIRECTDRAWSURFACE7 GetBackSurface(){ return m_lpDDSBack; } 
	LPDIRECTDRAWSURFACE7 GetTempSurface(){ return m_lpDDSTemp; } 
 
	int GetDeviceWidth(){ return m_iWidth; } 
	int GetDeviceHeight(){ return m_iHeight; } 
 
	bool IsWindowed() { return m_bWindowed; } 
	bool Is565(){ return m_DisplayFormat == R5G6B5; } 
	bool IsMMX() { return m_IsMMX; } 
	void LightenessControl( int iAdd ); 
	bool ScreenShot( char *szDirectory ); 
 
	DWORD ChangeColorKey( DWORD colorkey ); 
 
	int GetCharWidth() { return g_CharWidth;} 
	int GetCharHeight(){ return g_CharHeight;} 
public: 
	CSurface *CreateSurfaceEx( char *szFileName, int iWidth, int iHeight, bool isSysMemory, bool isColorKey, DWORD ColorKey ); 
	CSurface *CreateSurface( char *szFileName, bool isColorKey, DWORD ColorKey ); 
 
	CSurface *CreateSurfaceFromMemory( BYTE *pData, enum FILE_TYPE FileType = FT_ECP, 
									bool isSysMemory = false, bool isColorKey = false, DWORD ColorKey = 0 ); 
 
	CSurface *CreateSurfaceFromEPG( FILE *fp, int offset, POINT *pPoint ); 
 
	CSurface *NewSurface(); 
	void	 DeleteSurface( CSurface *pSurf ); 
 
protected: 
	LPDIRECTDRAW7			m_lpDD; 
	LPDIRECTDRAWSURFACE7	m_lpDDSPrimary; 
	LPDIRECTDRAWSURFACE7	m_lpDDSBack; 
	LPDIRECTDRAWSURFACE7	m_lpDDSTemp;					//一个离屏页面,用于完成各种特效 
 
	HWND					m_hWnd; 
	bool					m_bWindowed; 
	RECT					m_rcWindow; 
 
	IDirectDrawGammaControl *m_lpGammaControl; 
	LPDDGAMMARAMP			m_pGammaData; 
 
	int				m_iWidth; 
	int				m_iHeight; 
	DISPLAY_FORMAT	m_DisplayFormat; 
	bool			m_IsMMX; 
 
	CList			m_SurfaceList; 
 
public: 
	static int		g_CharWidth; 
	static int		g_CharHeight; 
}; 
 
typedef CEasyDraw* PEASYDRAW; 
 
 
//-------------------------------------------------DDraw辅助函数--------------------------------------------------- 
CEasyDraw *InitEasyDraw( HWND hwnd, bool isWindowed, int iW, int iH ); 
void	FreeEasyDraw(); 
CEasyDraw *GetEasyDrawPointer(); 
 
 
 
 
//--------------------------------------------DDraw应用函数------------------------------------------ 
 
HRESULT CreateSurfaceHelp( LPDIRECTDRAW7 lpdd, LPDIRECTDRAWSURFACE7 *ppSurface, int iW, int iH, bool isSysMemory, bool isColorKey, DWORD ColorKey ); 
 
HRESULT CreateSurfaceOfBmp( LPDIRECTDRAW7 lpdd, LPDIRECTDRAWSURFACE7 *ppSurface, char *szFileName, bool isSysMemory, bool isColorKey, DWORD ColorKey ); 
 
 
 
void SetColorKeyHelp( LPDIRECTDRAWSURFACE7 lpDDSurface, DWORD ColorKey); 
 
void ClearSurfaceHelp( LPDIRECTDRAWSURFACE7 lpDDSurface, RECT *pRect, DWORD Color ); 
 
 
 
LPDIRECTDRAWSURFACE7 LoadBmpToSurface( char *szFileName, LPDIRECTDRAWSURFACE7 lpDDSurface, int x, int y, bool isFromFile ); 
 
LPDIRECTDRAWSURFACE7 LoadBmpToSurfaceFromHBmp( HBITMAP hbmp, LPDIRECTDRAWSURFACE7 lpDDSurface, int x, int y ); 
 
LPDIRECTDRAWSURFACE7 LoadBmpFromMemory( BYTE *pData, LPDIRECTDRAW7 lpdd,  
									   LPDIRECTDRAWSURFACE7 lpDDSurface, RECT *pDestRect, 
									   bool isSysMemory ); 
 
 
 
void AlphaSurfaceRect16( LPDIRECTDRAWSURFACE7 lpSourceSur,  
						LPDIRECTDRAWSURFACE7 lpDestSur,  
						RECT *rcSrc, RECT *rcDest,  
						bool is565, bool isColorKey,  
						WORD ColorKey, DWORD alpha ); 
 
void AlphaHalf16(	LPDIRECTDRAWSURFACE7 lpSourceSur,  
					LPDIRECTDRAWSURFACE7 lpDestSur,  
					RECT *rcSrc, RECT *rcDest,  
					bool is565, bool isColorKey,  
					WORD ColorKey ); 
 
void DrawTextOnSurface( LPDIRECTDRAWSURFACE7 lpSurface, const char *szText, int TextLen, int x, int y, DWORD Color );	 
 
 
WORD RGB_To_565( int r, int g, int b ); 
WORD RGB_To_555( int r, int g, int b ); 
 
bool CopySurfaceToBmp16( LPDIRECTDRAWSURFACE7 lpDDSurface, char *szFileName, RECT *pRect, bool is565 ); 
 
/* 
HRESULT LoadJpegHelp(	LPDIRECTDRAW7 lpdd,  
								LPDIRECTDRAWSURFACE7 *ppSurface,	\ 
								char *szFileName,  
								LPDIRECTDRAWSURFACE7 surf,	\ 
								bool isSysMemory,			\ 
								bool isColorKey,			\ 
								DWORD ColorKey,				\ 
								bool is565 );		 
 
 
*/ 
#endif