问题描述
- OpenGL绘制字体的问题:项目从32位改到64位后不能绘制
- /*以下是准备工作*/
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] = '';
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 != ''; ++str){ glCallList(lists + *str);}
}
/*以上是之前绘制字体的函数,只要传入char* str就可以绘制出来数字,比如“12345”,但是项目从32位改为64位以后就没法绘制了,我查了一下,发现是wglUseFontBitmaps(wglGetCurrentDC() 0 MAX_CHAR lists);返回0,有没有大神知道是为什么啊,小弟没分。。。。真的不好意思*/
时间: 2024-12-31 02:54:34