《C/C++實現Console下的加載進度條模擬[美觀版]》


前言

  有時候我們會遇到在CMD或DOS控制台上出現的加載進度條,雖然不是如網頁和軟件寫的美觀。但確確實實也有着自己的特色。而且,一個好看的加載進度條也能增加用戶使用控制台程序的體驗!所以,拿來研究一下也未嘗不可!
  博主,一開始寫了個加載進度條的模擬。但是,效果不是很理想!於是,我默默地掏出了度娘....
  What are you 搞啥勒?網上的答案幾乎千篇一律,哎~有時候還能看見兩篇一模一樣的文章作者居然同時標注原創!而且,模擬的效果也不咋滴!
  沒辦法,自己動手豐衣足食!還是得我自己來!

第一次嘗試

  這是博主第一次寫的進度條,怎么講呢!兩個方塊之間的空隙讓人看了是真的不爽!

  之前見那些控制台應用程序的加載進度條也不是這樣的啊!為什么他們寫的挺好看的?
  中間這個方塊怎么解決?
  莫非不是某個字符輸出的?這時,我不經意間發現了這個....

  好像被選中的兩個字符中間是連續的啊!難道那些應用就是通過選中了那塊內容覆蓋弄出的嗎?好像不對!一來,這樣實現似乎比較困難;二來,每次...總之還是比較困難o(////▽////)o....
  不過....

第二次嘗試

  成了!!!真的可以,如果我們通過改變每個單位位寬的字體顏色和背景顏色一致,那不就實現連續的樣式了嗎?

  所以,上代碼!

#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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM