如何在我的C++ Windows控制台应用程序中更改字体?
它似乎不使用cmd.exe默认使用的字体(Lucida Console)。当我通过现有的cmd.exe运行我的应用程序(键入name.exe),它看起来像这样:http://dathui.mine.nu/konsol3.png,这是完全正确的。 但是当我单独运行我的应用程序(双击.exe文件)时,它看起来像这样:http://dathui.mine.nu/konsol2.png。 相同的代码,两个不同的外观。
所以现在我想知道如何更改字体,以便无论如何运行它,它都始终显示正确。
我是否可以为标准输出设置代码页或其他内容?
它似乎不使用cmd.exe默认使用的字体(Lucida Console)。当我通过现有的cmd.exe运行我的应用程序(键入name.exe),它看起来像这样:http://dathui.mine.nu/konsol3.png,这是完全正确的。 但是当我单独运行我的应用程序(双击.exe文件)时,它看起来像这样:http://dathui.mine.nu/konsol2.png。 相同的代码,两个不同的外观。
所以现在我想知道如何更改字体,以便无论如何运行它,它都始终显示正确。
编辑:
好的,更多信息。当我只使用这个小片段时:
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);
我是否可以为标准输出设置代码页或其他内容?