Перейти к содержанию

[Counter-Strike: Source] ISurface Проблема с выводом кирилицы


Рекомендуемые сообщения

Вывожу ники игроков, на латинце без проблем, а если крилица то тоже выводит то на конце иероглифы почему то.

Спойлер

void draw::Text(int x, int y, int align, unsigned color, const char* text, ...)
{
	wchar_t wstr[128];
	char	cstr[256];

	va_list	va_alist;
	va_start(va_alist, text);
	vsprintf(cstr, text, va_alist);
	va_end(va_alist);
	
	MultiByteToWideChar(CP_UTF8, 0, cstr, -1, wstr, 128);

	if (align)
	{
		int w, h;
		surface->GetTextSize(g_iFont, wstr, w, h);

		if (align == 1 && w > 0)
			w /= 2;

		x -= w;
	}

	surface->DrawSetTextColor(RGBA(color));
	surface->DrawSetTextPos(x, y);
	surface->DrawSetTextFont(g_iFont);
	surface->DrawPrintText(wstr, strlen(cstr));
}

 

 

Ссылка на комментарий
Поделиться на другие сайты

25 минут назад, darthmaul сказал:

surface->DrawPrintText(wstr, strlen(cstr));

Во-первых, надо мемсетом занулить выделенные буферы (массивы)

Во-вторых, если ты используешь юникод, то нужно и длину строки получать юникодовой функцией или же результат strlen(cstr) умножать на 2.

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Xipho сказал:

Во-первых, надо мемсетом занулить выделенные буферы (массивы)

Во-вторых, если ты используешь юникод, то нужно и длину строки получать юникодовой функцией или же результат strlen(cstr) умножать на 2.

Спасибо тебе админушка! Проблема действительно была в подсчете строки, заменил на wcslen(wstr) и все работает корректно)

Ссылка на комментарий
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.