
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[35.172.111.47] |
![]() |
|
Сообщ.
#1
,
|
|
|
Как выводить текст на русском языке ?
вот такой код есть ![]() ![]() void FormCreateFont() { HFONT font; HFONT fontsmall; HFONT oldfont; e::fontbase[0] = glGenLists(96); e::fontbase[1] = glGenLists(96); //font = CreateFont(-18, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, // ANTIALIASED_QUALITY, FF_DONTCARE | DEFAULT_PITCH, "Courier New"); font = CreateFont(-18, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, RUSSIAN_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY, FF_DONTCARE | DEFAULT_PITCH, "Courier New Cyr"); oldfont = (HFONT) SelectObject(e::hdc, font); wglUseFontBitmaps(e::hdc, 32, 96, e::fontbase[0]); SelectObject(e::hdc, oldfont); DeleteObject(font); fontsmall = CreateFont(-15, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY, FF_DONTCARE | DEFAULT_PITCH, "Courier New"); oldfont = (HFONT) SelectObject(e::hdc, fontsmall); wglUseFontBitmaps(e::hdc, 32, 96, e::fontbase[1]); SelectObject(e::hdc, oldfont); DeleteObject(fontsmall); } //... void FormPrintText(char str[256], float x, float y) { if (str == NULL) { return; } glLoadIdentity(); glTranslatef(x, y, 0.0f); glRasterPos2f(0.0f, 0.0f); glPushAttrib(GL_LIST_BIT); glListBase(e::fontbase[0] - 32); glCallLists((GLsizei)strlen(str), GL_UNSIGNED_BYTE, str); glPopAttrib(); } void FormPaintLabel() { glColor3f(0.0f, 0.8f, 0.8f); FormPrintText("Уровень", 24.0f, 629.0f); //FormPrintText("Level", 24.0f, 629.0f); FormPrintFloat(e::level, "%03.0f", 90.0f, 629.0f); // FormPrintText("Key", 737.0f, 629.0f); FormPrintFloat(e::key, "%03.0f", 782.0f, 629.0f); // FormPrintText("Day", 24.0f, 16.0f); FormPrintFloat(e::daycurr, "%03.0f", 70.0f, 16.0f); FormPrintText("/", 102.0f, 16.0f); FormPrintFloat(e::daymax, "%03.0f", 113.0f, 16.0f); // FormPrintText("Magic", 715.0f, 16.0f); FormPrintFloat(e::magic, "%03.0f", 782.0f, 16.0f); glPopMatrix(); } на английском надписи выводятся а на русском нет, что не так ? |
Сообщ.
#2
,
|
|
|
Цитата F0X @ Размер списка. Надо делать с учётом, что наши буквы идут в уникоде с номера 0x400:на английском надписи выводятся а на русском нет, что не так ? ![]() ![]() e::fontbase[0] = glGenLists(96 + 0x400); e::fontbase[1] = glGenLists(96 + 0x400); Добавлено П.С. ну и, конечно, придётся двухбайтовой кодировкой пользоваться: ![]() ![]() FormPrintText(L"Уровень", 24.0f, 629.0f); glCallLists((GLsizei)wcslen(str), GL_UNSIGNED_SHORT, str); void FormPrintText(wchar_t str[256], float x, float y) |
Сообщ.
#3
,
|
|
|
Попробовал подставить в код игры
но к сожалению требуется изменить на юникод во многих местах программы, то добавлять окончания W A, то менять на другие типы, и не только там где вывод текста. Поэтому программа начала сыпаться ошибками. В новой версии учту и уже буду проектировать изначально с учетом юникода. За подсказку спасибо |