📄 ddutil.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 + -