md_engine.h

来自「MDEngine2plus游戏开发库! 用来开发游戏超级简单!」· C头文件 代码 · 共 108 行

H
108
字号
//********************************************************************
//						MD 引擎 引擎 内核部件的定义
//		Powered by @J--S Studio			Johnhans		2004.08.08
//********************************************************************

#ifndef MD_ENGINE_H
#define MD_ENGINE_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


#define DIRECTDRAW_VERSION 0x0700

#include <ddraw.h>
#include "common.h"


typedef DWORD ( *getProviderTypeDLL)(void);
typedef bool ( *Create)(HWND,DWORD,DWORD,int,bool);
typedef DWORD ( *ChangeDisplayMode)(DWORD,DWORD,int,bool);
typedef bool ( *SaveScreen)(char *);
typedef void ( *ClearScreen)(LPVOID,DWORD len);


class CMD_Surface;
class MDENGINE_API CMD_Engine  
{
public:
	CMD_Engine(void);
	virtual ~CMD_Engine(void);
	void Free(void);

public:
	bool	Create(HWND h_Wnd, DWORD dw_Width, DWORD dw_Height, int dw_Bpp, BOOL bFullScreen=true, BOOL force=false);

	bool	IsFullScreen(void);

	const char*	GetCPUName(void);
	bool	IsCPUMMX(void);
	int		GetCPUSpeed(void);

	LPDIRECTDRAW7* GetDDObject(void);
	LPDIRECTDRAWSURFACE7* GetSurface(BYTE surface);

	SurfaceInfo* GetSurfaceInfo(BYTE surface);
	DWORD	GetPrimaryRGBMode(void);
	DWORD	GetRGBMode(LPDIRECTDRAWSURFACE7 lpDDS);
	HWND	GetHWnd(void);
	LPSIZE	GetScreenSize(void);
	LPRECT	GetScreenRect(void);

	void	ChangeDisplayMode(int dw_Width, int dw_Height , int bpp, bool bfullscreen=true, bool force=false);
	bool	SetWindowSize(int width,int height,bool autocenter = true);
	bool	SetWindowPos(int x,int y);
	void	CalcWindowPos(void);
	void	FlipScreen(void);
	HRESULT RestoreAll(void);

	DWORD	ColorMatch(WORD R, WORD G, WORD B);
	DWORD	ColorMatch(DWORD RGBcolor);
	DWORD	ColorMatch_DC(DWORD rgb);

	void	ClearScreen(BYTE Surface, LPRECT rect, DWORD Color);
	void	ClearScreen(BYTE Surface, LPRECT rect, WORD R=0,WORD G=0,WORD B=0);
	bool	BeginDraw(BYTE Surface=SUR_WORK);
	bool	EndDraw(BYTE Surface=SUR_WORK);
	bool	SaveScreen(const TCHAR *filename);

	void	DrawFast(CMD_Surface *pSour, BYTE dest, int x, int y, bool Trans=true);
	void	DrawScaling(CMD_Surface *pSour, BYTE dest, int x, int y, int cx, int cy, bool Trans=true);
	void	DrawGray(CMD_Surface *pSour, BYTE dest, int x, int y, bool Trans=true);
	void	DrawAdditive(CMD_Surface *pSour, BYTE dest, int x, int y, bool Trans=true);
	void	DrawAlpha(CMD_Surface *pSour, BYTE dest, int x, int y, int alpha, bool Trans=true);
	void	DrawAlphaFast(CMD_Surface *pSour, BYTE dest, int x, int y, bool Trans=true);

//---------------- 错误处理 ---------------
	inline	void	SetShowErrorMsg(bool show);
	inline	WORD	GetErrorCode(void);
	void	ShowErrorMsg(void);

private:
	LPDIRECTDRAW7			m_lpDD7;				// DirectDraw7
	LPDIRECTDRAWSURFACE7	m_lpDDSPrimary;			// 主图面
	LPDIRECTDRAWSURFACE7	m_lpDDSBack;			// 后端缓冲区
	LPDIRECTDRAWSURFACE7	m_lpDDSWork;			// 工作缓冲区
	HWND					m_hWnd;					// 主窗口句柄
	SurfaceInfo				m_SurfaceInfo;			// 某图面信息
	SIZE					m_szScreen;				// 屏幕宽、高
	RECT					m_rcScreen;				// 窗口模式操作区域
	BOOL					m_bFullScreen;			// 是否全屏模式
	DWORD					m_dwRGBMode;			// 主图面像素格式
	const char*				m_cCPUName;				// CPU名称
	int						m_iCPUSpeed;			// CPU速度
	bool					m_bCPUMMX;				// CPU是否支持MMX
	bool					m_bShowErrMsg;			// 出现错误时显示对话框
	WORD					m_ErrCode;				// 错误代码,0:无错误
};

#endif

⌨️ 快捷键说明

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