md_surface.h
来自「MDEngine2plus游戏开发库! 用来开发游戏超级简单!」· C头文件 代码 · 共 116 行
H
116 行
//********************************************************************
// MD 引擎 图面 部件的定义
// Powered by @J--S Studio Johnhans 2002.9.8
//********************************************************************
#ifndef MD_SURFACE_H
#define MD_SURFACE_H
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#ifdef MDENGINE2P_EXPORTS
#define MDENGINE_API __declspec(dllexport)
#else
#define MDENGINE_API __declspec(dllimport)
#endif
#include "common.h"
#include "MD_Engine.h"
class CImageBase;
class MDENGINE_API CMD_Surface
{
public:
CMD_Surface(void);
CMD_Surface(char *ProviderName);
virtual ~CMD_Surface(void);
void Free();
public:
bool ConnectProvider(char *ProviderName); // 联接到外部ImageProvider
void FreeProvider(); // 释放ImageProvider
bool Create(int width, int height, DWORD dwtrans=COLORKEY_NO, DWORD dwCaps=DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY);
bool Create(HBITMAP hBmp, DWORD dwtrans=COLORKEY_NO, DWORD dwCaps=DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY);
bool Create(TCHAR *filename, DWORD dwtrans=COLORKEY_NO, DWORD dwCaps=DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY);
bool Create(const BITMAPINFOHEADER &bmpinfohdr,RGBQUAD* BGRTable,const void *bitbuffer, DWORD dwtrans=COLORKEY_NO, DWORD dwCaps=DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY);
bool Create(const LPBYTE buffer,DWORD size,DWORD dwtrans=COLORKEY_NO,DWORD dwCaps=DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY);
LPDIRECTDRAWSURFACE7* GetDDSurface(void);
bool ScanSurfaceInfo(void);
SurfaceInfo* GetSurfaceInfo(void);
LPRECT GetBltRect(void);
DWORD GetTransparentColor(void);
DWORD GetTransparentColorK(void);
void SetTransparentColor(DWORD color);
void SetBltRect(int left, int top, int right, int bottom);
void SetBltRect(LPRECT rc);
void FillColor(LPRECT rect, DWORD Color);
void FillColor(LPRECT rect, WORD R=0, WORD G=0, WORD B=0);
void DrawFast(CMD_Surface *pDest, BYTE dest, int x, int y, bool Trans=true);
void DrawScaling(CMD_Surface *pDest, BYTE dest, RECT dRect, bool Trans=true);
void DrawScaling(CMD_Surface *pDest, BYTE dest, int x, int y, int cx, int cy, bool Trans=true);
void DrawGray(CMD_Surface *pDest, BYTE dest, int x, int y, bool Trans=true);
void DrawAdditive(CMD_Surface *pDest, BYTE dest, int x, int y, bool Trans=true);
void DrawAttenuation(CMD_Surface *pDest, BYTE dest, int x, int y, bool Trans=true);
void DrawAlpha(CMD_Surface *pDest, BYTE dest, int iDestX, int iDestY, int iAlpha, bool trans=true);
void DrawAlphaMMX(CMD_Surface *pDest, BYTE dest, int iDestX, int iDestY, int iAlpha, bool trans=true);
void DrawAlphaFast(CMD_Surface *pDest, BYTE dest, int iDestX, int iDestY, bool trans=true);
void DrawAlphaFastMMX(CMD_Surface *pDest, BYTE dest, int iDestX, int iDestY, bool trans=true);
private:
LPDIRECTDRAWSURFACE7 m_lpDDS; // DIRECTDRAWSURFACE7对象
static CMD_Engine* m_lpEngine; // CMD_Engine实例指针
DWORD m_dwTransparentColor; // 本图面透明色
DWORD m_dwTransparentColorK; // 本图面透明色(内部像素格式)
RECT m_rcBlt; // 位操作区域
SurfaceInfo m_SurfaceInfo; // 图面信息
private:
HINSTANCE m_hInstProvider; // Provider Instance
CImageBase* m_pLoader; // ImageProvider Loader
void* releaseDLL; // Provider Releaser
private:
DWORD DDColorMatch(COLORREF rgb); //颜色匹配
bool ClipRect(int &x, int &y, RECT &rc);
friend bool CMD_Engine::Create(HWND h_Wnd,DWORD dw_Width, DWORD dw_Height, int dw_Bpp,BOOL bFullScreen,BOOL force);
};
class CImageBase
{
public:
CImageBase():m_pPalette(NULL),m_pData(NULL),m_dwErrorCode(0),m_wBitCount(0),m_lHeight(0),m_lWidth(0){}
virtual ~CImageBase(){destory();}
virtual bool LoadImage(HWND hWnd, const LPVOID buffer,DWORD size,int bpp) = 0;
virtual bool SaveImage(HWND hWnd, char *name,void *img){ return false; }
long GetWidth(void){ return m_lWidth; }
long GetHeight(void){ return m_lHeight; }
WORD GetBitCount(void){ return m_wBitCount; }
RGBQUAD* GetPalette(void){ return m_pPalette; }
LPBYTE GetData(void){ return m_pData; }
protected:
void init(void){ m_dwErrorCode=0; m_lWidth=0; m_wBitCount=0; }
void destory(void){SAFE_DELETE(m_pPalette);SAFE_DELETE(m_pData);}
protected:
long m_lWidth;
long m_lHeight;
WORD m_wBitCount;
DWORD m_dwErrorCode;
RGBQUAD *m_pPalette;
LPBYTE m_pData;
};
#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?