Windows 10 - 启用ENABLE_VIRTUAL_TERMINAL_PROCESSING会在cmd中为所有行加下划线

时间:2016-09-08 20:56:47

标签: c++ windows console

为了使用Windows使用转义字符输出彩色文本,您必须启用该标志。我可以启用该标志,但这样做会强调控制台中的每一行,甚至是在启用ENABLE_VIRTUAL_TERMINAL_PROCESSING之前打印的行(这是用于打开彩色输出的标志)。

CORE_INFO("Output before ENABLE_VIRTUAL_TERMINAL_PROCESSING is enabled");
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
if (hOut == INVALID_HANDLE_VALUE) {
    CORE_ERROR("INVALID_HANDLE_VALUE: %d", GetLastError());
    return;
}

DWORD consoleMode = 0;
if (!GetConsoleMode(hOut, &consoleMode)) {
    CORE_ERROR("GetConsoleMode failed: %d", GetLastError());
    return;
}

consoleMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
if (!SetConsoleMode(hOut, consoleMode)) {
    CORE_ERROR("SetConsoleMode failed: %d", GetLastError());
    return;
}
CORE_INFO("Output after ENABLE_VIRTUAL_TERMINAL_PROCESSING is enabled");

以下是运行后代码的输出:http://i.imgur.com/48YmKzW.png

关闭应用程序会将控制台恢复正常,并保持着色:http://i.imgur.com/QgtHsT8.png

逐行逐行代码,一旦调用SetConsoleMode(hOut, consoleMode);,所有行都会加下划线,这让我相信如何启用标志是一个错误,但我正在关注MSDN所说的内容做。我无法链接它,因为我没有足够的代表。

如果有人对于为什么会发生这种情况有一些见解,我会非常感激。

0 个答案:

没有答案