Как изменить шрифт в моем консольном приложении C ++ для Windows?
Похоже, он не использует шрифт cmd.exe, используемый по умолчанию (Lucida Console). Когда я запускаю свое приложение через существующий cmd.exe (набрав name.exe), оно выглядит так: http://dathui.mine.nu/konsol3.png, что совершенно верно.
Но когда я запускаю свое приложение отдельно (дважды щелкнув по .exe), оно выглядит так: http://dathui.mine.nu/konsol2.png.
Один и тот же код, два разных вида.
Теперь мне интересно, как я могу изменить шрифт, чтобы он всегда выглядел правильно, независимо от того, как он работает.
EDIT:
Хорошо, еще немного информации. Когда я просто использую этот маленький фрагмент:
SetConsoleOutputCP(CP_UTF8);
wchar_t s[] = L"èéøÞǽлљΣæča";
int bufferSize = WideCharToMultiByte(CP_UTF8, 0, s, -1, NULL, 0, NULL, NULL);
char* m = new char[bufferSize];
WideCharToMultiByte(CP_UTF8, 0, s, -1, m, bufferSize, NULL, NULL);
wprintf(L"%S", m);
работает с правильным шрифтом. Но в моем реальном приложении я использую WriteConsoleOutput()
для печати строк:
CHAR_INFO* info = new CHAR_INFO[mWidth * mHeight];
for(unsigned int a = 0; a < mWidth*mHeight; ++a) {
info[a].Char.UnicodeChar = mWorld.getSymbol(mWorldX + (a % mWidth), mWorldY + (a / mWidth));
info[a].Attributes = mWorld.getColour(mWorldX + (a % mWidth), mWorldY + (a / mWidth));
}
COORD zero;
zero.X = zero.Y = 0;
COORD buffSize;
buffSize.X = mWidth;
buffSize.Y = mHeight;
if(!WriteConsoleOutputW(window, info, buffSize, zero, &rect)) {
exit(-1);
}
и тогда он использует неправильный шрифт. Я использую два разных окна, созданных так:
mHandleA = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0,
NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
Могу ли я установить кодовую страницу только для стандартного вывода или что-то в этом роде?