当前位置: 首页 > article >正文

【Linux系统】Linux下的图形库 ncurses(简单认识)




在这里插入图片描述



基本介绍

Linux 环境下,ncurses 是一个非常重要的库,用于编写可以在终端(TTY)或模拟终端窗口中运行的 字符界面程序。它提供了一套函数,使得开发者可以轻松地操作文本终端的显示,比如移动光标、创建窗口、改变文本颜色等,从而实现复杂的用户界面,而不需要直接处理底层的终端控制代码。



库的安装

// 安装
// Centos
$ sudo yum install -y ncurses-devel
// ubuntu
$ sudo apt install -y libncurses-dev



库的使用


gcc 编译时要加上引用外部库的选项

gcc -o test test.c -lncurses



这里仅仅展示一段字符进度条的程序:

#include <stdio.h>
#include <string.h>
#include <ncurses.h>
#include <unistd.h>
#define PROGRESS_BAR_WIDTH 30
#define BORDER_PADDING 2
#define WINDOW_WIDTH (PROGRESS_BAR_WIDTH + 2 * BORDER_PADDING + 2) // 加边框的宽度
#define WINDOW_HEIGHT 5
#define PROGRESS_INCREMENT 3
#define DELAY 300000 // 微秒(300毫秒)

int main()
{
    initscr();
    start_color();
    init_pair(1, COLOR_GREEN, COLOR_BLACK); // 已完成部分:绿⾊前景,⿊⾊背景
    init_pair(2, COLOR_RED, COLOR_BLACK);   // 剩余部分(虽然⽤红⾊可能不太合适,但为演⽰⽬的):红⾊背景
    cbreak();
    noecho();
    curs_set(FALSE);
    int max_y, max_x;
    getmaxyx(stdscr, max_y, max_x);
    int start_y = (max_y - WINDOW_HEIGHT) / 2;
    int start_x = (max_x - WINDOW_WIDTH) / 2;
    WINDOW *win = newwin(WINDOW_HEIGHT, WINDOW_WIDTH, start_y, start_x);
    box(win, 0, 0); // 加边框
    wrefresh(win);
    int progress = 0;
    int max_progress = PROGRESS_BAR_WIDTH;
    while (progress <= max_progress)
    {
        werase(win); // 清除窗⼝内容
        // 计算已完成的进度和剩余的进度
        int completed = progress;
        int remaining = max_progress - progress;
        // 显⽰进度条
        int bar_x = BORDER_PADDING + 1; // 进度条在窗⼝中的x坐标
        int bar_y = 1;                  // 进度条在窗⼝中的y坐标(居中)
        // 已完成部分
        attron(COLOR_PAIR(1));
        for (int i = 0; i < completed; i++)
        {
            mvwprintw(win, bar_y, bar_x + i, "#");
        }
        attroff(COLOR_PAIR(1));
        // 剩余部分(⽤背景⾊填充)
        attron(A_BOLD | COLOR_PAIR(2)); // 加粗并设置背景⾊为红⾊(仅⽤于演⽰)
        for (int i = completed; i < max_progress; i++)
        {
            mvwprintw(win, bar_y, bar_x + i, " ");
        }
        attroff(A_BOLD | COLOR_PAIR(2));
        // 显⽰百分⽐
        char percent_str[10];
        snprintf(percent_str, sizeof(percent_str), "%d%%", (progress * 100) / max_progress);
        int percent_x = (WINDOW_WIDTH - strlen(percent_str)) / 2; // 居中显⽰
        mvwprintw(win, WINDOW_HEIGHT - 1, percent_x, percent_str);
        wrefresh(win); // 刷新窗⼝以显⽰更新
        // 增加进度
        progress += PROGRESS_INCREMENT;
        // 延迟⼀段时间
        usleep(DELAY);
    }
    // 清理并退出ncurses模式
    delwin(win);
    endwin();
    return 0;
}



效果演示:


在这里插入图片描述



优秀博客学习

ncurse编程指南




http://www.kler.cn/a/511552.html

相关文章:

  • 基于VSCode+CMake+debootstrap搭建Ubuntu交叉编译开发环境
  • 电子电气架构 --- ECU故障诊断指南
  • LeetCode 题目 2545. 根据第 K 场考试的分数排序
  • Yii框架中的数据提取:从不同数据源获取数据
  • GoLang教程002:Go语言中的变量声明
  • Flutter+vsCode 安装问题记录
  • python怎么搞定输入??
  • 【Linux】Linux命令:ifconfig
  • Java 基于 SpringBoot+Vue 的校园数字化图书馆(源码+部署+文档)
  • 电梯系统的UML文档06
  • 从单机到集群:Docker、Kubernetes 与 Helm 部署 Redis 全攻略
  • Cyber Security 101-Offensive Security-SQLMap: The Basics(sqlmap基础)
  • 2024年博客成长记:成就、挑战与未来展望
  • 【AIGC】SYNCAMMASTER:多视角多像机的视频生成
  • 毕业就业信息|基于Vue的毕业就业信息管理系统的设计与实现(源码+数据库+文档)
  • apisix的authz-casbin
  • 【专题三:穷举vs暴搜vs深搜vs回溯vs剪枝】46. 全排列
  • Nginx关于servername配置无效的处理
  • PDF工具箱 PDF24 ,免费下载,非常好用
  • Spring Boot中的条件注解是如何工作的