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

Linux 为打印控制字符实现

Windows 为WINAPI控制台接口实现

功能:

移动到上一行

移动到下一行

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

    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
    }

最近更新

  1. TCP协议是安全的吗?

    2023-12-20 16:44:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-20 16:44:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-20 16:44:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-20 16:44:01       18 阅读

热门阅读

  1. html css背景图片透明文字不透明

    2023-12-20 16:44:01       35 阅读
  2. vuex--未完

    2023-12-20 16:44:01       48 阅读
  3. Web安全 - 深入同源策略

    2023-12-20 16:44:01       37 阅读
  4. 蓝底白字车牌的定位与字符分割识别 MATLAB 仿真

    2023-12-20 16:44:01       34 阅读
  5. [PTA]矩阵列平移

    2023-12-20 16:44:01       38 阅读
  6. 05-MySQL中的limit和union关键字

    2023-12-20 16:44:01       33 阅读
  7. 【libevent】IO引擎及实现

    2023-12-20 16:44:01       30 阅读
  8. springboot 解析微信小程序获取手机号

    2023-12-20 16:44:01       23 阅读
  9. 基于改进鲸鱼算法的最小乘支持向量机数据分类

    2023-12-20 16:44:01       29 阅读
  10. Python用Pygame实现一个五子棋小游戏

    2023-12-20 16:44:01       35 阅读
  11. iOS将framework转为xcframework

    2023-12-20 16:44:01       35 阅读
  12. Dubbo RPC-Redis协议

    2023-12-20 16:44:01       42 阅读