五、顯示漢字
#include<Windows.h>
#include<gl/glut.h>
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
#define Max_Char 128
void PrintWord(const char *str)
{
static GLuint GLlists;
wchar_t *wstring;
GLlists=glGenLists(1);
int len=0;
for(int i=0;str[i]!='\0';i++)
{
if(IsDBCSLeadByte(str[i]))//判斷是否雙字節
++i;
++len;
}
wstring=(wchar_t *)malloc((len+1)*sizeof(wchar_t));
MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,str,-1,wstring,len);//將字符串轉換爲雙字節
wstring[len]=L'\0';//字符串末尾添加'\0'結束符
for(int i=0;i<len;i++)
{
wglUseFontBitmapsW(wglGetCurrentDC(),wstring[i],1,GLlists);//設置顯示列表字符
glCallList(GLlists);
}
free(wstring);//釋放內存
glDeleteLists(GLlists,1);//銷燬顯示列表
}
void selectFont(int size, int charset, const char* face) {
HFONT hFont = CreateFontA(size, 0, 0, 0, 500, 0, 0, 0,
charset, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, face);
HFONT hOldFont = (HFONT)SelectObject(wglGetCurrentDC(), hFont);
DeleteObject(hOldFont);
}
void init(void)
{
glClearColor(0.0,0.0,0.0,0.0);
glShadeModel(GL_SMOOTH);
}
void disply()
{
glClear(GL_COLOR_BUFFER_BIT);
selectFont(48, ANSI_CHARSET, "黑體"); //調用參數爲 字號 字符集 字體
glRasterPos2f(-0.1f, 0.0f);
glColor3f(1.0,0.0,0.0);
PrintWord("你好麼?");
glFlush();
}
int main(int argc, char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);//指定顯示模式
glutInitWindowSize(500,500);//指定窗口大小
glutInitWindowPosition(100,100);//指定窗口左上角位置
glutCreateWindow("OpenGL");//創建窗口標題爲OpenGL的窗口
init();
glutDisplayFunc(disply);
glutMainLoop();
return 0;
}