gpt4 book ai didi

c++ - wcswidth_l 的 Windows 版本

转载 作者:可可西里 更新时间:2023-11-01 09:38:38 26 4
gpt4 key购买 nike

我有一些文本要写入 Windows 控制台,我需要知道列的实际宽度。 wcswidth_l 似乎是拥有它的平台上的最佳选择(尽管 mbswidth_l() 会更好,因为我不想使用 wchar_t,但由于某种原因它不存在)。但是除了其他平台之外,我还需要一些可以在 Windows 上运行的东西。虽然不太可能有可移植的解决方案,但我不知道在 Windows 上有任何解决方案。我认为控制台有一个用于获取光标位置等的 API,因此我可以写出文本并检查位置的变化。我想那是准确的,但是写出额外的输出是完全 Not Acceptable 。

如何在 Windows 上获取字符串或字符的列宽?

编辑:

wcswidth_l 返回用于显示字符串的控制台列数。一些字符占据一列,而其他字符,例如日文字符,占两个。

例如“aあ”的“​​列宽”为四。 'a'是一,''是一,而'あ'是二。 (假设控制台设置为实际显示非 ascii 字符)。另外,如果 API 支持使用代码页 65001 (UTF-8) 的字符串,那就太好了。

最佳答案

首先,Windows Console API 位于here .

其次,是你要找的功能GetConsoleFontSize

我将尝试在一秒钟内快速输入示例。

编辑:给你。如果有小错误请见谅。我实际上发现它更容易。 GetCurrentConsoleFont 在您获取要传递给 GetConsoleFontSize 的索引的过程中填写一个 COORD 结构,因此节省了步骤:)

#define _WIN32_WINNT 0x0501 //XP, 0x0601=windows 7
#include <windows.h>

int main()
{
HANDLE hStdOutput = GetStdHandle (STD_OUTPUT_HANDLE);

CONSOLE_FONT_INFO cfi;
GetCurrentConsoleFont (hStdOutput, FALSE, &cfi);

//cfi.dwFontSize.X == x size
//cfi.dwFontSize.Y == y size
}

编辑:

如果您不介意不可见的输出,您可以使用 CreateConsoleScreenBuffer 在您的命令下几乎拥有一个不可见的控制台窗口,同时让您的控制台窗口不受影响。 GetConsoleScreenBufferInfoEx 将告诉您光标位置,此时您可以使用 WriteConsole 写入您的缓冲区(不可见),并再次检查光标位置与实际字符数书面。请注意,事先检查光标位置不需要清除屏幕即可使用此方法。

如果您负担不起额外的输出,无论是可见的还是不可见的,我不确定是否真的有这种可能性。

关于c++ - wcswidth_l 的 Windows 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9900399/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com