openGL學習筆記5 顯示漢字

五、顯示漢字

#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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章