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

📄 text.cpp

📁 冰人引擎,本2d游戏引擎定位于游戏次中层引擎。他不像CDX等引擎那样
💻 CPP
字号:
#include "StdAfx.h"
#include "text.h"

CText::CText()
{
	m_hFont = NULL;
	m_hFontDC = NULL;

	m_pBuffer = CDisplay::Instance()->GetEngineBuffer();
	m_pTextBuffer = NULL;
	
	m_dwColor = RGB(0,255,0);		//文字颜色
	m_dwColorKey = RGB(255,255,1);
	
	m_dwWidth = CDisplay::Instance()->GetScreenWidth();		//文字缓冲区大小
	m_dwHeight = CDisplay::Instance()->GetScreenHeight();
}

CText::~CText(void)
{
	Destroy();
}

bool CText::Create(DWORD dwHeight, LPCTSTR lpFontname)
{
	//创建兼容DC
	m_hFontDC = CreateCompatibleDC(NULL);
	if(m_hFontDC == NULL)
	{
		DebugMsg("创建DC失败\n");
		return false;
	}

	//字体结构
	LOGFONT LogFont;
	ZeroMemory( &LogFont, sizeof(LogFont) );
	LogFont.lfHeight			= dwHeight;
	LogFont.lfWidth				= 0;
	LogFont.lfEscapement		= 0;
	LogFont.lfOrientation		= 0;
	LogFont.lfWeight			= FW_BOLD;
	LogFont.lfItalic			= false;
	LogFont.lfUnderline			= false;
	LogFont.lfStrikeOut			= false;
	LogFont.lfCharSet			= DEFAULT_CHARSET;
	LogFont.lfOutPrecision		= OUT_DEFAULT_PRECIS; 
	LogFont.lfClipPrecision		= CLIP_DEFAULT_PRECIS; 
	LogFont.lfQuality			= DEFAULT_QUALITY;
	LogFont.lfPitchAndFamily	= DEFAULT_PITCH;

	//创建字体
	m_hFont = CreateFontIndirect( &LogFont );
	if(m_hFont == NULL)
	{
		DeleteDC(m_hFontDC);
		DebugMsg("创建字体失败\n");
		return false;
	}
	
	//创建文字缓冲(其实,就是一个DIB)
	BITMAPINFO bmi;
	ZeroMemory(&bmi.bmiHeader, sizeof(BITMAPINFOHEADER));
	bmi.bmiHeader.biSize		= sizeof(BITMAPINFOHEADER);
	bmi.bmiHeader.biWidth		= m_dwWidth;
	bmi.bmiHeader.biHeight		= m_dwHeight;
	bmi.bmiHeader.biPlanes		= 1;
	bmi.bmiHeader.biBitCount	= 32;
	bmi.bmiHeader.biCompression = BI_RGB;

	//获得缓冲指针
	m_hBitmap = CreateDIBSection( m_hFontDC, &bmi, DIB_RGB_COLORS,(void **) &m_pTextBuffer, NULL, 0 );
	if( m_hBitmap == NULL)
	{
		DeleteObject(m_hFont);
		DeleteDC(m_hFontDC);
		DebugMsg("创建DIB失败\n");
		return false;
	}

	//填充透明色
	NesMemSet(m_pTextBuffer,0,m_dwColorKey,(m_dwWidth * 4 * m_dwHeight) >> 2);

	SelectObject( m_hFontDC, m_hBitmap );
	SelectObject( m_hFontDC, m_hFont );

	return true;
}

void CText::Destroy(void)
{
	if(m_hBitmap)
	{
		DeleteObject( m_hBitmap );
		m_hBitmap = NULL;
	}
	if(m_hFont) 
	{
		DeleteObject( m_hFont );
		m_hFont = NULL;
	}
	if(m_hFontDC)
	{
		DeleteObject( m_hFontDC );
		m_hFontDC = NULL;
	}
}

void CText::DrawText(DWORD dwX,DWORD dwY,char* szText)
{
	::SetTextColor( m_hFontDC, m_dwColor );
	SetBkMode( m_hFontDC,TRANSPARENT );
	
	TextOut( m_hFontDC,dwX,dwY,szText,strlen(szText) );
	
	//将文字缓冲的内容拷贝到主缓冲中
	DWORD DestOff = 0,SrcOff = sizeof(DWORD) * m_dwWidth * m_dwHeight;
	for(DWORD i = 0;i < m_dwHeight;i ++)
	{
		NesDrawLineNormalColorKey(m_pBuffer,DestOff,m_pTextBuffer,SrcOff,m_dwWidth,m_dwColorKey);
		DestOff += CDisplay::Instance()->GetEngineBufferPitch();
		SrcOff -= sizeof(DWORD) * m_dwWidth;
	}
}

void CText::PrintText(DWORD dwX, DWORD dwY,const char* szText, ... )
{
	char szBuff[MAX_PATH];
	
	va_list vl;
	va_start(vl, szText);
	vsprintf(szBuff, szText, vl);
	va_end(vl);
	
	DrawText(dwX,dwY,szBuff);
}

⌨️ 快捷键说明

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