如何用C语言实现进度条

如何用C语言实现进度条,第1张

第一种,用printf模拟输出百分比,在控制台输出,实现进度监控。

代码:

#include<stdio.h>

#define N 20

void mBar(float fBar){

 

    int i,j,k,m

    for ( i=0i<N+6i++ ) printf("\b")

    k=N*fBar m=fBar*100 printf("[")

    for ( i=0i<ki++ ) printf("=")

    for ( j=0j<N-kj++ ) printf(" ")

    printf("]%3d%%",m) 

}

void delay(int n) { int i,j,k for ( i=0i<ni++ ) for ( j=0j<0x07fffj++ ) k++ }

void main()

{

    float x

    int i

    for ( i=0,x=0i<100i++,x+=0.01 ) { mBar(x) delay(1024) }

    mBar(1)

}

第二种,使用窗口组件。这个要看程序工作环境,纯粹的c语言是无法实现的。可以使VC++。Visual C++中的MFC类提供了标准的进度指示器控件(CProgressCtrl)。

m_progress->GetPos()//获取进度条的当前位置

m_progress->GetRange(int min,int max)//获取进度条控件的范围的下限和上限

m_progress->OffsetPos(int nPos)//用指定的增量推进进度条控件的当前位置,重绘进度条反映新位置

m_progress->SetBkColor(COLORREF clrNew)//设定进度条的背景颜色

m_progress->SerPos(int nPos)//设定进度条控件的当前位置,重绘进度条反映新位置

m_progress->SetRange(int min,int max)//设定进度条控件的范围的下限和上限

m_progress->SetRange32(int min,int max)//设定进度条控件的范围的下限和上限

m_progress->SetStep(int nStep)//指定进度条控件的步进增量

m_progress->StepIt()//通过步进增量,推进进度条控件的当前位置,重绘进度条反映新位置

应用:

CProgressCtrl *m_progress//头文件中声明

在OnInitDialog初始化

   {

   m_progress = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS1)

   m_progress->SetRange(0,1000)

   m_progress->SetPos(0)

   UINT m_timer =(UINT) SetTimer(1,200,NULL)

   }

采用在定时器的消息处理函数WM_TIMER内添加不断更新进度条界面的方法

OnTimer (nIDEvent)

{

   pos = pos + 50

   if(pos>500)

   pos = 0

   m_Progress->SetPos(pos)

}

或者采用在某种循环体内添加不断更新进展条界面的方法

程序1:#include "stdio.h"

#include <dos.h>

#include <conio.h>

/*去光标函数*/

void no_text_cursor(void)

{

union REGS r

r.h.ah=1

r.h.ch=32

int86(0x10,&r,&r)

}

main()

{

int i

int bfb

char b=219

char c='%'

for(i=1i<=60i++)

{ gotoxy(i,1)/*为了能在进度条和百分比之间变动让轮扰*/

no_text_cursor()

delay(45000)/*前后两个delay是为了坦旦让滚动更好看,流畅*/

printf("%c",b)

delay(45000)

gotoxy(31,2)/*为了能在进度条和百分比之间变动*/

bfb=((i*10)/6)

printf("%d",bfb)

gotoxy(34,2)

printf("%")

}

printf("\nLoading Successful!")

getch()

}程序2:#include<graphics.h>

main()

{

int gdriver=DETECT,gmod,i

/桐哗*registerbgidriver(EGAVGA_driver)*/

initgraph(&gdriver,&gmod,"")

setlinestyle(0,0,2)

rectangle(3,215,637,250)

setcolor(RED)

sleep(3)

for(i=0i<632++i)

{

if(i==631)break

line(5+i,216,5+i,249)

delay(2888)

}

getch()

closegraph()

} 以上程序均在TC2.0下通过

<p>您好,sa团队给出的答案</p> <p>(由于本人不用做百分比进度条,所以从网上找了一个,不知道对不对,仅供参考)</p> <p>#!/bin/sh<br>off (){<br>echo -e "\e[?25l"<br>}<br>on (){<br>echo -e "\e[?25h"<br>}<br>gotoxy (){<br>echo -ne "\e[$1$2h"<br>}<br>character (){<br>gotoxy 0 0<br>echo "["<br>gotoxy 0 44<br>echo "]"<br>n=2<br>num=0<br>while [ $n != 44 ]<br>do<br>sleep 0.07<br>gotoxy 0 $n<br>echo -en "\e[144m \e[0m"<br>gotoxy 0 45<br>echo -n "$num%"<br>num=$(echo "$n * 2.3 + 1" | bc )<br>(( n++ ))<br>done<br>gotoxy 0 45<br>echo -n "100.0%"<br>}<br>clear<br>off<br>character <br>on</p>雹运伍 <p></p> <p>源或 </p> <p>这里有一个网悄芹址,提供给您(cfm补丁0.2版,增加了进度条,百分比等内容的显示 </p> <p>): <a href="https://wenwen.sogou.com/login/redirect?url=http%3a%2f%2fclub.noahedu.com%2fthread-116262-1-1.html" target="_blank">http://club.noahedu.com/thread-116262-1-1.html</a></p>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12539633.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存