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