使用WINAPI获取窗口上的标签宽度?

时间:2017-04-24 18:44:31

标签: winapi windows-console

我需要在Windows控制台中格式化字符完美文本,因此我需要获取标签大小来处理标签。我查看了Console functions,但它似乎没有包含此类信息。

是否有办法获取标签大小,或者是WIN API未公开的内容?

1 个答案:

答案 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,假设该进程已连接到控制台。