如何在我的C++ Windows控制台应用程序中更改字体?在C++控制台应用程序中使用Unicode字体
它似乎没有使用默认使用的字体cmd.exe(Lucida控制台)。当我通过现有的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);
我可能是设置语言编码的只是标准输出什么?
嗯......奇怪的是,有一种方法来检测控制台与双击与几个例外情况。这篇文章是一个好的开始,但它不够远:http://www.codeguru.com/cpp/misc/misc/consoleapps/article.php/c15893/ – 2009-12-17 15:03:24
您使用哪种编译器? – SjB 2009-12-17 15:09:21
也许跟踪启动代码 - 从pre main() - 查看实际构建控制台窗口本身的代码是什么?我假设编译器/控制台项目提供的.exe文件必须有一些代码,用于检测您的应用程序是否已经在控制台中启动,或者是否需要控制台,以便在这种情况下为您创建控制台窗口。这是我的直觉,不是研究的事实,但可能只有几分钟的调试才能验证。在这一点上,你可以看到它的源代码,看看你可能需要做什么才能访问该控制台HWND,以不同的方式设置它的字体...... – Mordachai 2009-12-17 15:11:04