• 大小: 2KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-20
  • 语言: C/C++
  • 标签: OpenGL  文字  中文  C++    

资源简介

OpenGl文字显示c++类,包括*.h和*.cpp,可显示中英文,已优化,速度很快。

资源截图

代码片段和文件信息

#include “stdafx.h“
#include “glText.h“
#include 
#include 
#include 
#include 

CGlFont::CGlFont()
{
m_hFont=NULL;
InitFont(“宋体“);
m_X = 0;
m_Y = 0;
m_dHeight = 0;
m_fExtrusion = 0.1f;
m_rotateTheta = 0.0;
 m_iDisplayList = 0;
 m_red =255;
 m_blue = 255;
 m_green = 255;
}

CGlFont::~CGlFont()
{
}

LOGFONT CGlFont::GetLogFont()
{
LOGFONT lf;
Getobject(m_hFontsizeof(LOGFONT)&lf);
return lf;
}

void CGlFont::DeleteFont()
{
if(m_hFont)
{
Deleteobject(m_hFont);
m_hFont=NULL;
}
}

bool CGlFont::InitFont(LOGFONT &lf)
{
DeleteFont();
m_hFont=CreateFontIndirect(&lf);
if( m_hFont )return true;
else return false;;
}

bool CGlFont::InitFont(char *fontName)
{
DeleteFont();
m_hFont = CreateFont(
-16 //< lfHeight 字体高度
0 //< lfWidth 字体宽度 
0 //< lfEscapement 字体的旋转角度 Angle Of Escapement 
0 //< lfOrientation 字体底线的旋转角度Orientation Angle 
FW_BOLD //< lfWeight 字体的重量 
FALSE //< lfItalic 是否使用斜体 
FALSE //< lfUnderline 是否使用下划线 
FALSE //< lfStrikeOut 是否使用删除线 
GB2312_CHARSET //< lfCharSet 设置字符集 
OUT_TT_PRECIS //< lfOutPrecision 输出精度 
CLIP_DEFAULT_PRECIS //< lfClipPrecision 裁剪精度 
ANTIALIASED_QUALITY //< lfQuality 输出质量 
FF_DONTCARE|DEFAULT_PITCH //< lfPitchAndFamily Family And Pitch 
fontName); //< lfFaceName 字体名称 
if(m_hFont)return true;
else return false;
}

void CGlFont::Draw2DText(char *string)
{
if(strlen(string)<=0)return;

//HDC hDC=wglGetCurrentDC();
HDC hDC = ::CreateCompatibleDC(NULL);

HFONT hOldFont=NULL;
hOldFont=(HFONT)Selectobject(hDCm_hFont);
if(!hOldFont)
{
return;
}

glRasterPos2f(m_X m_Y);

DWORD dwChar;
int ListNum;
for(size_t i=0;i {
if(IsDBCSLeadByte(string[i]))
{
dwChar=((unsigned char)string[i])*0x100+(unsigned char)string[i+1];
i++;
}
else
{
dwChar=string[i];
}
ListNum=glGenLists(1);
wglUseFontBitmaps(hDCdwChar1ListNum);
glCallList(ListNum);
glDeleteLists(ListNum1);
}

Selectobject(hDChOldFont);
::DeleteDC(hDC);
}
map  CGlFont::m_sglFontList;

void CGlFont::Draw3DText(const char *string)
{
if(strlen(string)<=0)
return;

GLYPHMETRICSFLOAT pgmf[1];
HDC hDC=wglGetCurrentDC();

//设置当前字体
HFONT hOldFont=NULL;
hOldFont=(HFONT)Selectobject(hDCm_hFont);
if(!hOldFont)
{
return;
}
DWORD dwChar;
int ListNum;

int iNum=strlen((char *)string);
m_iDisplayList=glGenLists(1);

glPushMatrix();

for(size_t i=0;i {
if(IsDBCSLeadByte(string[i]))//是否为中文
{
dwChar=((unsigned char)string[i])*0x100+(unsigned char)string[i+1];
i++;
}
else
{
dwChar=string[i];
}
//不同的文字在文字描述表中只出现一次,如“我是中国中国”,重复的中和国只出现一次,这样大大提高了速度
if (m_sglFontList.find(dwChar) == m_sglFontList.e

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       1258  2010-08-24 10:01  glText.h

     文件       4148  2010-08-24 10:01  glText.cpp

----------- ---------  ---------- -----  ----

                 5406                    2


评论

共有 条评论