c_cpp 将ANSI字符输出到Windows控制台

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 将ANSI字符输出到Windows控制台相关的知识,希望对你有一定的参考价值。

#include <Windows.h>

void ScrollUp(HANDLE hOut, const CONSOLE_SCREEN_BUFFER_INFO& csbi)
{
    SMALL_RECT r = { 0, 1, csbi.dwSize.X - 1,  csbi.dwSize.Y - 1 };
    CHAR_INFO fill = { csbi.wAttributes, ' ' };
    COORD p = { 0, 0 };
    ScrollConsoleScreenBuffer(hOut, &r, nullptr, p, &fill);
}

void NewLine(HANDLE hOut)
{
    CONSOLE_SCREEN_BUFFER_INFO csbi = {};
    GetConsoleScreenBufferInfo(hOut, &csbi);
    csbi.dwCursorPosition.X = 0;
    if (csbi.dwCursorPosition.Y == csbi.dwSize.Y)
        ScrollUp(hOut, csbi);
    else
        ++csbi.dwCursorPosition.Y;
    SetConsoleCursorPosition(hOut, csbi.dwCursorPosition);
}

int main(int argc, char* argv[])
{
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    DWORD mode = 0;
    GetConsoleMode(hOut, &mode);
    SetConsoleMode(hOut, mode & ~ENABLE_PROCESSED_OUTPUT);
    if (argc <= 1)
    {
        const BYTE len = 32;
        for (int j = 0; j < 255; j += len)
        {
            char msg[len];
            for (BYTE i = 0; i < len; ++i)
                msg[i] = i + (BYTE) j;
            DWORD written = 0;
            WriteConsole(hOut, msg, len, &written, nullptr);
            NewLine(hOut);
        }
    }
    else
    {
        DWORD len = argc - 1;
        char msg[1024];
        for (int j = 1; j < argc; ++j)
            msg[j - 1] = atoi(argv[j]);
        DWORD written = 0;
        WriteConsole(hOut, msg, len, &written, nullptr);
    }
    SetConsoleMode(hOut, mode);
    return 0;
}

以上是关于c_cpp 将ANSI字符输出到Windows控制台的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 将utf8文件输出到控制台

如何使用 ANSI Escape 代码在控制台上输出彩色文本

原创python中文编码问题:控制窗口能输出中文,到文本文件里乱码

WinAPI FTPGetFile 从 ANSI 到 Unicode 的转换

在 Windows 中使用 C++ 将 Unicode 输出到控制台

将文本装饰添加到控制台输出