OPENGL里面显示汉字,中文字下面出现两道横杠,
大家帮忙看看代码检查一下错误?先谢了
void CGLFont::Create(char *typeface, int Height, int BOLD, int italic)
{
LOGFONT logfont; //逻辑字体

// 设置字体特征
logfont.lfHeight = Height;   //字高
logfont.lfWidth = 0;         //字宽
logfont.lfEscapement = 0;    //字符串角度(1/10度)
logfont.lfOrientation = 0;     
logfont.lfWeight = BOLD;  //粗体
logfont.lfItalic = italic;   //斜体
logfont.lfUnderline = TRUE;  //下划线
logfont.lfStrikeOut = TRUE;  //删除线
logfont.lfCharSet = ANSI_CHARSET;
logfont.lfOutPrecision = OUT_DEFAULT_PRECIS;
logfont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
logfont.lfQuality = DEFAULT_QUALITY;
logfont.lfPitchAndFamily = DEFAULT_PITCH;
strcpy(logfont.lfFaceName,typeface); //字体名称

// 创建字体
hFont = CreateFontIndirect(&logfont);
}void CGLFont::PrintfBitmap(GLuint x, GLuint y, LPCTSTR lpszText)
{
HBITMAP bitmap;  //位图数据
BITMAP bm;
SIZE size;
UCHAR* pBmpBits; //位图像素位
HFONT hOldFont;  //旧字体指针
HBITMAP hPrevBmp;

HDC hdc = wglGetCurrentDC(); //获得当前设备场景

if(!hFont) 
{ // use default system font
  hFont = (HFONT)::GetStockObject(SYSTEM_FONT);
}

// 选择新字体,保存旧字体
hOldFont = (HFONT)SelectObject(hdc, hFont); 

::GetTextExtentPoint32(hdc, lpszText, strlen(lpszText), &size);

// 创建字符位图对象(对应字符位图空间)
// bitmap.CreateBitmap(size.cx, size.cy, 1, 1, NULL);
bitmap = CreateCompatibleBitmap(hdc, size.cx, size.cy);

// 创建与hdc兼容的暂存DC
HDC hMemDC = ::CreateCompatibleDC(hdc);

if(hMemDC)
{   //选择字符位图到暂存DC
hPrevBmp = (HBITMAP)SelectObject(hMemDC,bitmap);
}

HFONT hPrevFont = (HFONT)SelectObject(hMemDC, hFont);

SetBkColor(hMemDC, RGB(0, 0, 0));
SetTextColor(hMemDC, RGB(255, 255, 255));
SetBkMode(hMemDC, OPAQUE); // 输出文字到暂存DC
TextOut(hMemDC, 0, 0, lpszText, strlen(lpszText));

// copy GDI bitmap to DIB
// bitmap.GetBitmap(&bm); //获得字符位图数据
GetObject (bitmap, sizeof(BITMAP),(LPVOID)&bm);
size.cx = (bm.bmWidth + 31) & (~31);
size.cy = bm.bmHeight;
int bufsize = size.cy * (((bm.bmWidth + 31) & (~31)) /8);
pBmpBits = new UCHAR[bufsize];
memset(pBmpBits, 0, sizeof(UCHAR)*bufsize);

struct
{ BITMAPINFOHEADER bih;
  RGBQUAD col[2];
}bic;

BITMAPINFO *binf = (BITMAPINFO *)&bic;
binf->bmiHeader.biSize = sizeof(binf->bmiHeader);
binf->bmiHeader.biWidth = bm.bmWidth;
binf->bmiHeader.biHeight = bm.bmHeight;
binf->bmiHeader.biPlanes = 1;
binf->bmiHeader.biBitCount = 1;
binf->bmiHeader.biCompression = BI_RGB;
binf->bmiHeader.biSizeImage = bufsize;
binf->bmiHeader.biXPelsPerMeter = 1;
binf->bmiHeader.biYPelsPerMeter = 1;
binf->bmiHeader.biClrUsed = 0;
binf->bmiHeader.biClrImportant = 0; ::GetDIBits(hdc, bitmap, 0, bm.bmHeight, pBmpBits, binf,DIB_RGB_COLORS);
SelectObject(hMemDC, hPrevBmp);
::DeleteDC(hMemDC);

SelectObject(hdc, hOldFont);  // 设回旧字体
glPixelStorei(GL_UNPACK_ALIGNMENT, 1); //控制像素存储

glRasterPos2i(x,y);
glBitmap(size.cx, size.cy, 0.0, 2.0, size.cx+2.0f, 0.0,pBmpBits);

delete pBmpBits;
}

解决方案 »

  1.   

    logfont.lfCharSet = ANSI_CHARSET; 
    ----
    这个一般是用DEFAULT_CHARSET,这样当OS是EN的时候它就是ANSI_CHARSET,是中文的时候就是GB2312_CHARSET
      

  2.   

    logfont.lfUnderline = TRUE;  //下划线
    logfont.lfStrikeOut = TRUE;  //删除线 都修改成FALSE不就没有线了。
      

  3.   

    你的字体风格设置的有2道横杠:
    logfont.lfUnderline = TRUE;  //下划线 
    logfont.lfStrikeOut = TRUE;  //删除线 
      

  4.   

    你的字体风格设置的有2道横杠: 
    logfont.lfUnderline = TRUE;  //下划线 
    logfont.lfStrikeOut = TRUE;  //删除线 

    正解
      

  5.   

    都说完了。。
    logfont.lfUnderline = FALSE;  //下划线 
    logfont.lfStrikeOut = FALSE;  //删除线