⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ddutil.h

📁 一款不错的射击类游戏
💻 H
字号:
//-----------------------------------------------------------------------------
// File: ddutil.cpp
//
// Desc: Routines for loading bitmap and palettes from resources
//
// Copyright (C) 1998-2001 Microsoft Corporation. All Rights Reserved.
//-----------------------------------------------------------------------------
#ifndef DDUTIL_H
#define DDUTIL_H

#include <ddraw.h>
#include <d3d.h>
//TGA 文件头
typedef struct _TGAHEAD
{
	BYTE  IdLength;
	BYTE  ColorMapType;
	BYTE  ImageType;
	WORD  CMapStart;
	WORD  CMapLength;
	BYTE  CMapDepth;
	WORD  XOffset;
	WORD  YOffset;
	WORD  Width;
	WORD  Height;
	BYTE  PixelDepth;
	BYTE  ImageDescriptor;
}TgaHead,* LPTGAHEAD;

//BIN 文件头
typedef struct _BINHEAD
{
	char szFileType[4];  //TGA is "PIC", BMP is "NAL"
	WORD  colorkey;
	int  CenterX;
	int  CenterY;
	WORD  Width;
	WORD  Height;
}BinHead,*LPBINHEAD;

//-----------------------------------------------------------------------------
// Classes defined in this header file 
//-----------------------------------------------------------------------------
class CDisplay;
class CSurface;

//含有alpha的图面
typedef  struct _ALPHASURFACE
{
	BYTE *lpAlpha;
	CSurface *lpSurface;
}AlphaSurface,*LPALPHASURFACE;

//地图用psd图层
typedef struct	_PSDLAYER
{
	RECT			rect;			//在pad中的位置
	char			szLayerName[256];//图层名
	CSurface	*	lpSurface;
	bool			bVisible;		//是否可见
}PSDLayer,*LPPSDLAYER;

//-----------------------------------------------------------------------------
// Flags for the CDisplay and CSurface methods
//-----------------------------------------------------------------------------
#define DSURFACELOCK_READ
#define DSURFACELOCK_WRITE



//-----------------------------------------------------------------------------
// Name: class CDisplay
// Desc: Class to handle all DDraw aspects of a display, including creation of
//       front and back buffers, creating offscreen surfaces and palettes,
//       and blitting surface and displaying bitmaps.
//-----------------------------------------------------------------------------
class CDisplay
{
protected:
    LPDIRECTDRAW7        m_pDD;
    LPDIRECTDRAWSURFACE7 m_pddsFrontBuffer;
    LPDIRECTDRAWSURFACE7 m_pddsBackBuffer;
    LPDIRECTDRAWSURFACE7 m_pddsBackBufferLeft; // For stereo modes

    HWND                 m_hWnd;
    RECT                 m_rcWindow;
    BOOL                 m_bWindowed;
    BOOL                 m_bStereo;

public:
	HRESULT CreateAlphaSurfaceFromBIN(LPALPHASURFACE *ppAlphaSurface, const TCHAR *strBIN);
	HRESULT BltThin(int nX, int nY, LPALPHASURFACE lpAlphaSurface, int nOption, int nIndex, int nTotal);
	HRESULT Blt05(int nX, int nY, CSurface* lpSurface);
	HRESULT BltGreen(int nX, int nY, LPALPHASURFACE lpAlphaSurface, int nOption);
	HRESULT BltBlue(int nX, int nY, LPALPHASURFACE lpAlphaSurface, int nOption);
	HRESULT TestEffect(int nX, int nY, LPALPHASURFACE lpAlphaSurface, int nOption, int nIndex, int nTotal);
	HRESULT Blt(RECT *prcDes, LPALPHASURFACE lpAlphaSurface, RECT *prcSrc = NULL);
	HRESULT FadeOut(BYTE btPara);
	HRESULT FadeIn(BYTE btPara);
	void DrawBlackGauze();
	int GetHeight();
	int GetWidth();
	HRESULT CreateSurfaceFromBIN(CSurface **ppSurface, const TCHAR *strBIN);
	HRESULT DisplayTextEx(int nX, int nY, COLORREF dwColor, int nWidht, int nHeight, int nWeight, const TCHAR *szText);
	HRESULT CreateSurfaceFromBitmapEx( CSurface** ppSurface,const TCHAR *strBMP, DWORD dwX, DWORD dwY, DWORD dwWidth, DWORD dwHeight);
	HRESULT DisplayText(int nX, int nY, COLORREF dwColor,const TCHAR *szText);
	HRESULT DisplayText(RECT rect, COLORREF dwColor,const TCHAR *szText);
	HRESULT DrawRectangle(RECT rect_i, WORD wColor_i);
    CDisplay();
    ~CDisplay();

    // Access functions
    HWND                 GetHWnd()           { return m_hWnd; }
    LPDIRECTDRAW7        GetDirectDraw()     { return m_pDD; }
    LPDIRECTDRAWSURFACE7 GetFrontBuffer()    { return m_pddsFrontBuffer; }
    LPDIRECTDRAWSURFACE7 GetBackBuffer()     { return m_pddsBackBuffer; }
    LPDIRECTDRAWSURFACE7 GetBackBufferLeft() { return m_pddsBackBufferLeft; }

    // Status functions
    BOOL    IsWindowed()                     { return m_bWindowed; }
    BOOL    IsStereo()                       { return m_bStereo; }

    // Creation/destruction methods
    HRESULT CreateFullScreenDisplay( HWND hWnd, DWORD dwWidth, DWORD dwHeight,
		                             DWORD dwBPP );
    HRESULT CreateWindowedDisplay( HWND hWnd, DWORD dwWidth, DWORD dwHeight );
	HRESULT CreateChildCtrlDisplay( HWND hWnd, DWORD dwWidth, DWORD dwHeight );
    HRESULT InitClipper();
    HRESULT UpdateBounds();
    virtual HRESULT DestroyObjects();

    // Methods to create child objects
    HRESULT CreateSurface( CSurface** ppSurface, DWORD dwWidth,
		                   DWORD dwHeight );
    HRESULT CreateSurfaceFromBitmap( CSurface** ppSurface, const TCHAR* strBMP,
		                             DWORD dwDesiredWidth,
									 DWORD dwDesiredHeight );
	HRESULT CreateSurfaceFromTGA( CSurface** ppSurface, const TCHAR* strTGA);
	HRESULT CreateAlphaSurfaceFromTGA( LPALPHASURFACE* ppAlphaSurface, const TCHAR* strTGA);
		      
    HRESULT CreateSurfaceFromText( CSurface** ppSurface, HFONT hFont,
		                           const TCHAR* strText, 
								   COLORREF crBackground,
								   COLORREF crForeground );
    HRESULT CreatePaletteFromBitmap( LPDIRECTDRAWPALETTE* ppPalette, const TCHAR* strBMP );

    // Display methods
    HRESULT Clear( DWORD dwColor = 0L );
    HRESULT ColorKeyBlt( DWORD x, DWORD y, LPDIRECTDRAWSURFACE7 pdds,
                         RECT* prc = NULL );
    HRESULT Blt( DWORD x, DWORD y, LPDIRECTDRAWSURFACE7 pdds,
		         RECT* prc=NULL, DWORD dwFlags=0 );
    HRESULT Blt( int x, int y, CSurface* pSurface, RECT* prc = NULL );
	HRESULT Blt( int x, int y, LPALPHASURFACE pAlphaSurface, int nOption);
    HRESULT ShowBitmap( HBITMAP hbm, LPDIRECTDRAWPALETTE pPalette=NULL );
    HRESULT SetPalette( LPDIRECTDRAWPALETTE pPalette );
    HRESULT Present();
	//--------------------------------
	HRESULT MyBlt( DWORD x, DWORD y, CSurface* pSurface, RECT* prc = NULL );
	HRESULT MyFlip(int nDarkness);
	HRESULT MyFlip(int nRed, int nGreen, int nBlue);

	HRESULT FillRectangle16Alpha(RECT rect_i, WORD wColor_i);
	HRESULT FillRectangle16(RECT rect_i, WORD wColor_i);
	HRESULT DrawLine(int nX1_i, int nY1_i, int nX2_i, int nY2_i, COLORREF dwColor);
};




//-----------------------------------------------------------------------------
// Name: class CSurface
// Desc: Class to handle aspects of a DirectDrawSurface.
//-----------------------------------------------------------------------------
class CSurface
{
    LPDIRECTDRAWSURFACE7 m_pdds;
    DDSURFACEDESC2       m_ddsd;
    BOOL                 m_bColorKeyed;

public:
	HRESULT SetColorKey16(WORD wColorKey);
	DWORD ColorMatch(COLORREF rgb);
    LPDIRECTDRAWSURFACE7 GetDDrawSurface() { return m_pdds; }
    BOOL                 IsColorKeyed()    { return m_bColorKeyed; }

    HRESULT DrawBitmap( HBITMAP hBMP, DWORD dwBMPOriginX = 0, DWORD dwBMPOriginY = 0, 
		                DWORD dwBMPWidth = 0, DWORD dwBMPHeight = 0 );
    HRESULT DrawBitmap( TCHAR* strBMP, DWORD dwDesiredWidth, DWORD dwDesiredHeight );
    HRESULT DrawText( HFONT hFont,const  TCHAR* strText, DWORD dwOriginX, DWORD dwOriginY,
		              COLORREF crBackground, COLORREF crForeground );

    HRESULT SetColorKey( DWORD dwColorKey );
    DWORD   ConvertGDIColor( COLORREF dwGDIColor );
    static HRESULT GetBitMaskInfo( DWORD dwBitMask, DWORD* pdwShift, DWORD* pdwBits );

    HRESULT Create( LPDIRECTDRAW7 pDD, DDSURFACEDESC2* pddsd );
    HRESULT Create( LPDIRECTDRAWSURFACE7 pdds );
    HRESULT Destroy();

	int GetWidth();
	int GetHeight();

    CSurface();
    ~CSurface();
	int m_nCenterX;
	int m_nCenterY;
};




#endif // DDUTIL_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -