《C/C++实现Console下的加载进度条模拟[美观版]》

前言

  有时候我们会遇到在CMD或DOS控制台上出现的加载进度条,虽然不是如网页和软件写的美观。但确确实实也有着自己的特色。而且,一个好看的加载进度条也能增加用户使用控制台程序的体验!所以,拿来研究一下也未尝不可!
  博主,一开始写了个加载进度条的模拟。但是,效果不是很理想!于是,我默默地掏出了度娘....
  What are you 搞啥勒?网上的答案几乎千篇一律,哎~有时候还能看见两篇一模一样的文章作者居然同时标注原创!而且,模拟的效果也不咋滴!
  没办法,自己动手丰衣足食!还是得我自己来!

第一次尝试

  这是博主第一次写的进度条,怎么讲呢!两个方块之间的空隙让人看了是真的不爽!
《C/C++实现Console下的加载进度条模拟[美观版]》
  之前见那些控制台应用程序的加载进度条也不是这样的啊!为什么他们写的挺好看的?
  中间这个方块怎么解决?
  莫非不是某个字符输出的?这时,我不经意间发现了这个....
《C/C++实现Console下的加载进度条模拟[美观版]》
  好像被选中的两个字符中间是连续的啊!难道那些应用就是通过选中了那块内容覆盖弄出的吗?好像不对!一来,这样实现似乎比较困难;二来,每次...总之还是比较困难o(////▽////)o....
  不过....

第二次尝试

  成了!!!真的可以,如果我们通过改变每个单位位宽的字体颜色和背景颜色一致,那不就实现连续的样式了吗?
《C/C++实现Console下的加载进度条模拟[美观版]》

  所以,上代码!

#include <iostream>
#include <stdio.h>
#include <windows.h>

void gotoxy(int x, int y);
int main()
{
    char a[4] = {'|','/','-','\'}; //存储相关的字符
    int i, j, x=2, y=1; //声明变量
    std::cout << "*******加载进度条模拟*******" << std::endl;  //输出顶框
    putchar('n');  //为接下来的进度条保留空位
    std::cout << "******点赞***+***关注******" << std::endl;    //输出底框
    gotoxy(x,y);    //调用函数控制光标位置
    for (i = 0;i <= 100;i++) {   //进度条总进度控制
        std::cout << " [";    //进度条左边框
        for (j = 0;j < i/10;j++) {   //控制加载进度的显示
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | BACKGROUND_INTENSITY);  //设置加载条样式配置
            std::cout << "_";
        }
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY); //恢复原配置
        for (j = 0;j < (10-(i/10));j++) { printf("%c", '.'); }   //未加载进度显示
        std::cout << "] ";    //进度条右边框
        std::cout << a[i%4] << "正在加载中"; //显示和程序进行中提示和“正在加载”字样提示
        for (j = 0;j < (i%4);j++) { std::cout << "."; }    //实现动态显示
        for (j = 0;j < (4-i%4);j++) { printf("%c", ' '); }
        Sleep(100); //控制程序运行速度
        putchar('r');  //回车
    }
    std::cout << "( ゜- ゜)つロBiliBili干杯~n" << std::endl; //防覆盖
}
void gotoxy(int x, int y)   //自定义 gotoxy 函数
{
    COORD c;
    c.X = x;c.Y = y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);
}

总结

  1. gotoxy(int x,int y);函数的使用可以极大的增强我们在控制台输入和输出的灵活性;
  2. BOOL SetConsoleTextAttribute(HANDLE hConsoleOutput, WORD wAttributes);函数的使用,使得控制台样式的多样性得以补充。

说明

本内容首发于BiliBili!为作者本人原创!
如有转载,请务必注明出处!
原文章地址:https:////www.cnblogs.com/seafever/p/12345200.html

原文链接: https://www.cnblogs.com/seafever/p/12345200.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    《C/C++实现Console下的加载进度条模拟[美观版]》

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/331021

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午5:52
下一篇 2023年3月1日 下午5:52

相关推荐