c++ - 在 C++ 控制台应用程序中使用 Unicode 字体

标签 c++ winapi unicode fonts console-application

如何更改 C++ Windows 控制台应用程序中的字体?

它似乎没有使用 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);

我可以为标准输出或其他设置代码页吗?

最佳答案

Windows 使用 exe 路径作为键将 cmd 设置(包括字体)存储在注册表中。根键是“HKEY_CURRENT_USER\Console”,所以如果您使用 regedit 查看那里,您应该会看到几个以各种 exe 命名的子键。

要复制现有 exe 的设置,您可以将 key 导出到文本文件,然后编辑该文件以将 key 名称更改为您的 exe 的名称,然后重新导入它。

您也可以以编程方式修改注册表,但我怀疑这会立即生效 w.r.t.到您的控制台窗口。

关于c++ - 在 C++ 控制台应用程序中使用 Unicode 字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1922294/

相关文章:

c++ - 从 C++ 启动 matlab 脚本并等待结果

c++ - 我的 Word 加载项的对话框不使用视觉样式

java - 如何从包含任何字符的文本文件中查找最长的单词?

perl - IO::获取和取消获取 unicode 字符的句柄

javascript - 在希伯来语中搜索希伯来语悬音标记

c++ - 如何使用 Vulkan 编译 HLSL 着色器?

c++ - QPainter 保留以前的绘图

c++ - C++ 编译器中存在哪些不常见的浮点大小?

c++ - Win32 : Create a class with standard cursor (IDC_CROSS)

excel - 在vba中使用LOCALE_NAME_USER_DEFAULT系统常量