/*以下是准备工作*/
HFONT hFont = CreateFont(30, 0, 0, 0, FW_MEDIUM, 0, 0, 0,
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, TEXT("宋体"));
HFONT hOldFont = (HFONT)SelectObject(wglGetCurrentDC(), hFont);
DeleteObject(hOldFont);
glColor3f(1.0f, 0.0f, 0.0f);
glRasterPos3f(txtpos.x, txtpos.y, txtpos.z);
int strlen = walllength.GetLength();
char *wall_lengh = new char[strlen + 1];
memset(wall_lengh, 0, strlen + 1);
WideCharToMultiByte(CP_OEMCP, NULL, (LPCWSTR)walllength, -1, NULL, 0, NULL, FALSE);
WideCharToMultiByte(CP_OEMCP, NULL, (LPCWSTR)walllength, -1, (LPSTR)wall_lengh, strlen, NULL, FALSE);
wall_lengh[strlen] = '\0';
GLDrawString(wall_lengh);
/*以下是绘制函数**********************************************************************************************/
void GLDrawString(const char* str) {
static int isFirstCall = 1;
static GLuint lists;
if (isFirstCall) { // 如果是第一次调用,执行初始化
// 为每一个ASCII字符产生一个显示列表
isFirstCall = 0;
// 申请MAX_CHAR个连续的显示列表编号
lists = glGenLists(MAX_CHAR);
// 把每个字符的绘制命令都装到对应的显示列表中
//HDC c = wglGetCurrentDC();
wglUseFontBitmaps(wglGetCurrentDC(), 0, MAX_CHAR, lists);
/*glGetError();*/
}
// 调用每个字符对应的显示列表,绘制每个字符
for (; *str != '\0'; ++str)
{
glCallList(lists + *str);
}
}
/*以上是之前绘制字体的函数,只要传入char* str就可以绘制出来数字,比如“12345”,但是项目从32位改为64位以后就没法绘制了,我查了一下,发现是wglUseFontBitmaps(wglGetCurrentDC(), 0, MAX_CHAR, lists);返回0,有没有大神知道是为什么啊,小弟没分。。。。真的不好意思*/