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

📄 pgesurface.h

📁 pocket pc小游戏源码
💻 H
字号:
// PGESurface.h: interface for the CPGESurface class.
//
//////////////////////////////////////////////////////////////////////

#pragma once

#include "pgestd.h"
#include "pgedevice.h"
#include "PGEFont.h"
#define PGE_MAX_SURFACE 255
#define PGE_RESNAME_MAX 30

#define RGBto16bit565(r, g, b) \
	(((WORD)r<<8)&0xf800)|(((WORD)g<<3)&0x07e0)|((WORD)b>>3) \

// PGE标准颜色
enum PGE_DEFCOLOR
{
	PGE_NONECOLOR = 0xfffff,
		PGE_BLACK = 0,
		PGE_WHITE = 0xffff,
		PGE_RED = 0xf800,
		PGE_GREEN = 0x7e0,
		PGE_BLUE = 0x1f,
		PGE_PURPLE = 0xf81f,
		PGE_YELLOW = 0xffe0,
		PGE_LIGHTBLUE = 0x7ff,
};

// PGE表面类型
enum PGE_SURFACE_TYPE
{
	PGE_NOMARL_SURFACE = 0,
		PGE_MAIN_SURFACE,
		PGE_BACK_SURFACE,
		PGE_PGP_SURFACE
};

// PGE绘图参数
enum PGE_BLT_TYPE
{
	PGE_BLT_NORMAL = 0x1,	
		PGE_BLT_ADD = 0x2,
		PGE_BLT_OR = 0x3,
		PGE_BLT_AND = 0x4,
		PGE_BLT_ALPHA = 0x5,

		PGE_BLT_MASK = 0x10,
		PGE_BLT_COLOR = 0x20,
		PGE_BLT_ROTSCL = 0x100,
		PGE_BLT_ANDALPHA = 0x1000,	// 使用目的面的Alpha
		PGE_CLT_COPYALPHA = 0x2000,	// 复制alpha通道到目的面,只适用于PGE_BLT_NORMAL
	
};

// 字体使用参数
enum PGE_FONT_DRAWTYPE
{
	PGE_FONT_USEMAIN = 0xff,
		PGE_FONT_USEFILE,
		PGE_FONT_USESURFACE,
	PGE_FONT_MUTIL = 0,
		PGE_FONT_SINGLELINE
};

typedef struct tgaSurfaceInfo
{
	WORD wWiedth, wHeigh;
	BYTE wSurfaceTp;
} PGESurfaceInfo;

class CPGESurface : public CPGEBase   
{
public:
	CPGESurface(CPGEDevice* pDevice);
	virtual ~CPGESurface();

	// 创建一个表面
	PGE_RESULT CreateSurface(WORD wGrHeight, WORD wGrWide, 
		BYTE btSurfaceTp = PGE_NOMARL_SURFACE,  
		DWORD dwMaskColor = PGE_NONECOLOR);			

	// 锁定表面
	void Lock(void** pBuff);					

	// 表面解锁
	void unLock();							

	// 在表面上贴图
	void Blt(CPGESurface* pSrcSurface, 
		RECT* prSrc, RECT* prDis, WORD wFlag = PGE_BLT_NORMAL);						

	// 把表面的内容翻转到屏幕或者主表面
	void Flip();	// 竖向		
	void FlipH();	// 横向

	void Clean(int bWhite=0);

	PGE_RESULT SetSurfaceInfo(PGESurfaceInfo SurfaceInfo, CPGEBase* pPGEBase = NULL);	// 设置表面信息
	PGESurfaceInfo* GetSurfaceInfo();	// 区的表面信息

	DWORD GetMaskColor();	// 取得遮挡色
	void SetMaskColor(WORD wColor);

	void DrawText(char* pText, int x, int y, WORD wColor);	// 绘制文字
	PGE_RESULT CreateFont(void* pData = NULL, WORD iUseType = PGE_FONT_USEMAIN);	// 为表面创建字体
	CPGEFont* GetFont(CPGEBase* pPGEBase = NULL);	// 取得表面字体

	BYTE* GetAlphaChanle();	// 取得alpha通道
	BYTE* GetStaticAlphaChanle();	// 取得静态alpha通道
	void SetAlphaChanle(RECT* pRect, BYTE* pbtAlphaData);	// 设定某区域内Alpha
	void RestoreAlphaChanle(RECT* pRect);	// 恢复Alpha,前提拥有staticAlpha
	PGE_RESULT EnableAlphaChanle();			// 开启alpha通道,调用此函数将同时开启alpha和staticAlpha,并拷贝aplha到staticalpha

	PGE_RESULT CreateAlphaWithMaskColor();	// 使用遮挡色创建alpha

	void SetScale(float fScale);	// 放缩
	float GetScale();				// 取得放缩值
	DWORD GetScaleOffset();			// 取得取整后的放缩值

	void SetRot(short iRot);	// 旋转,单位: 角度
	int GetRot();

	void SetAlphaVal(BYTE btAlpha);
	BYTE GetAlphaVal();

	DWORD GetDataSize();
	
	void SetReplaceColor(WORD wColor);
	WORD GetReplaceColor();

	void SetPal(WORD* pwPal, int iPalPiexlCount);
	WORD* GetPal();

	// pgp面,使用staticAlpha,setPgpSurface时,必须设置pbtAlpha并且不设置pbtStaticAlpha,然后调用enableAlpha
	// 否则,需要自己处理staticAlpha并且设置pbtStaticAlpha
	void SetPgpSurface(WORD* pwPicData, BYTE* pbtAlpha = NULL, BYTE* pbtStaticAlpha = NULL);

	void SetPiexl(int x, int y, WORD wColor);					// 设置某个点的颜色
	void DrawLine(int x1, int y1, int x2, int y2, WORD wColor);	// 画线
	void DrawRect(int x1, int y1, int x2, int y2, WORD wColor, int bk = 0);	// 画矩形
	void DrawCircle(int x0, int y0, int r, WORD wColor);		// 画圆

	BYTE m_btSurfaceBit;		// 表面位数
	BYTE m_btUserData;			// 可以保存一字节用户数据
	WPOINT	m_CentPoint;		// 面的中心点,默认为%50的x,y
	BYTE m_btActive;

private:
	void Blt8(CPGESurface* pSrcSurface, RECT* prSrc, RECT* prDis, WORD wFlag);
	CPGEDevice* m_pDevice;	// PGE主设备

	PGESurfaceInfo m_SurfaceInfo;		// 表面类型
	BYTE* m_pbtAlphaChanle;	// Alpha通道
	BYTE* m_pbtAlphaChanleStatic;	// 静态Alpha通道
	WORD* m_pwMainData;		// 表面主缓冲
	DWORD m_dwDataSize;	// 表面大小
	
	CPGEFont* m_pFont;	// 字体
	BYTE m_btFontH;		// 字体高
	BYTE m_btFontW;		// 字体宽

	BOOL m_bAlphaChanle;	// 是否具有Alpha通道
	BOOL m_bLocked;			// 锁定标志
	DWORD m_dwScale;		// 缩放倍数
	short m_iRot;				// 旋转角度
	DWORD m_dwMaskColor;	// 遮罩颜色
	BYTE  m_btAlpha;		// alpha值,作用于整个表面,当使用时alpha通道不起作用

	WORD m_wRplaceColor;		// 用来叠加在表面上的颜色
	WORD* m_pwPal;				// 调色板
};

// 从文件创建一个面,支持pgp和bmp,推荐pgp,因为经过优化
void CreateSurfaceFromFile(CPGESurface** pSurface, 
								 char* caFileName, CPGEDevice* 
								 pDevice, DWORD wMaskColor = PGE_NONECOLOR);	

// 从文件创建Alpha通道,只支持8位bmp 
PGE_RESULT CreateAlphaFromFile(CPGESurface* pSurface, 
								 char* caFileName);	

// 将一个面保存到24位位图
bool SaveToBitmapFile(CPGESurface* lpSurface, char* filename);



⌨️ 快捷键说明

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