C/C++ 控制台窗口光标移动位置实现(Linux/Windows)

Linux 为打印控制字符实现

Windows 为WINAPI控制台接口实现

功能:

移动到上一行

移动到下一行

定位控制台光标位置到指定X,Y坐标

cpp 复制代码
    static bool MoveConsoleCursorPositionToPreviousNextLine(bool previous, int line) noexcept {
        if (line < 0) {
            return false;
        }

        if (line == 0) {
            return true;
        }

#ifdef _WIN32
        CONSOLE_SCREEN_BUFFER_INFO csbi;
        HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
        if (NULL == hConsole) {
            return false;
        }

        if (!GetConsoleScreenBufferInfo(hConsole, &csbi)) {
            return false;
        }

        COORD pos{};
        pos.X = csbi.dwCursorPosition.X;
        pos.Y = previous ? csbi.dwCursorPosition.Y - 1 : csbi.dwCursorPosition.Y + 1;

        return SetConsoleCursorPosition(hConsole, pos);
#else
        return ::fprintf(stdout, previous ? "\033[%dA" : "\033[%dB", line) > 0;
#endif
    }

    bool MoveConsoleCursorPositionToPreviousLine(int line) noexcept {
        return MoveConsoleCursorPositionToPreviousNextLine(true, line);
    }

    bool MoveConsoleCursorPositionToNextLine(int line) noexcept {
        return MoveConsoleCursorPositionToPreviousNextLine(false, line);
    }

    bool SetConsoleCursorPosition(int x, int y) noexcept {
#ifdef _WIN32
        HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
        if (NULL == hConsole) {
            return false;
        }

        COORD coord = { (SHORT)x, (SHORT)y };
        return ::SetConsoleCursorPosition(hConsole, coord);
#else
        return ::fprintf(stdout, "\033[%d;%dH", x, y) > 0;
#endif
    }
相关推荐
yzq1991274 分钟前
10.C语言-表达式、左值与语句
c语言·指针·函数·表达式·语句
Arik~朽木16 分钟前
Ubuntu 安装指南
linux·运维·ubuntu
chengO_o19 分钟前
AVL树详解与实现(C++)
数据结构·c++·avl树·平衡二叉搜索树
難釋懷24 分钟前
Nginx高可用配置
linux·nginx·php
玉树临风ives24 分钟前
atcoder ABC 458 题解
数据结构·c++·算法
IMPYLH25 分钟前
Linux 的 yes 命令
linux·运维·服务器·数据库·bash
chengO_o28 分钟前
STL关联式容器:map 与 set 的使用
c++·stl·set·map·平衡二叉搜索树
东城绝神43 分钟前
《Linux运维实战:使用脚本模拟服务器CPU内存磁盘使用率》
linux·运维·服务器
染翰44 分钟前
Linux root用户安装配置Git
linux·git·后端
Cat_Rocky1 小时前
k8s-Prometheus的manifests 清单部署
linux·kubernetes·prometheus