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