我需要在Windows控制台中格式化字符完美文本,因此我需要获取标签大小来处理标签。我查看了Console functions,但它似乎没有包含此类信息。
是否有办法获取标签大小,或者是WIN API未公开的内容?
答案 0 :(得分:1)
如果您不想对标签停止宽度进行硬编码,则可以在打印\r\t
后查询光标位置。例如:
int get_tab_stop_width()
{
int tab_stop_width = -1;
HANDLE h = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0,
NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
if (h != INVALID_HANDLE_VALUE) {
DWORD n;
if (WriteConsoleW(h, L"\r\t", 2, &n, NULL)) {
CONSOLE_SCREEN_BUFFER_INFO info;
if (GetConsoleScreenBufferInfo(h, &info))
tab_stop_width = info.dwCursorPosition.X;
}
CloseHandle(h);
}
return tab_stop_width;
}
这应该在所有版本的Windows上返回8,假设该进程已连接到控制台。