首页编程c 进度条?如何用C语言实现进度条

c 进度条?如何用C语言实现进度条

编程之家2023-11-03116次浏览

大家好,关于c 进度条很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于如何用C语言实现进度条的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

c 进度条?如何用C语言实现进度条

bat怎么弄进度条

一、实现原理

采用一个完整的图片来作为进度条,每次当进度条改变时,采用先贴图再用背景色擦去不需显示的一段进度的方法来实现进度条的变化,可实现制作任何复杂美观的进度条。

二、准备工作

首先需准备一个如下图样式的进度条图片(当然你可以做你自己喜欢的样式)。然后在窗体中加入一PictureBox控件,属性设置如下:

AutoSize:True

Appearance:Falt

c 进度条?如何用C语言实现进度条

AutoRedraw:True

ScaleMode: Pixel

Picture:〃准备的图片〃

再加一辅助控件(只用于保存图片,方便快捷地使用进度条)Image,属性设置如下:

Picture:〃准备的图片〃

Visible:FALSE

c 进度条?如何用C语言实现进度条

说明:本文所讲的进度条并不是狭义上那种安装程序中常见的仅表示一个事件进程的进度条,而是把那些条形的,表示一个量的大小的图示统称为进度条。以此概念为基础让我们先来看看它的一些用途和类别,然后给出各类进度条的实现。

如何用C语言实现进度条

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

代码:

#include<stdio.h>

#defineN20

voidmBar(floatfBar){

inti,j,k,m;

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

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

for(i=0;i<k;i++)printf("=");

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

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

}

voiddelay(intn){inti,j,k;for(i=0;i<n;i++)for(j=0;j<0x07fff;j++)k++;}

voidmain()

{

floatx;

inti;

for(i=0,x=0;i<100;i++,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);

}

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

如何用纯CSS3制作进度条

1、写一个样式为.containe的div用来包含进度条,其次是用样式为.title的div来包裹标题。

2、接下来,添加样式为.bar的di来包含填充和未填充的进度条样式。最后,在.bar里添加样式为.bar-unfill和.bar-fill的span标签。

<divclass="container">

<divclass="titleplain">Plain</div>

<divclass="bar">

<spanclass="bar-unfill">

<spanclass="bar-fill"></span>

</span>

</div>

</div>

3.简单的进度条的CSS代码.container类里将width定义为30%使进度条能够自适应。放一些简单的border-radius之类的属性在我们的.title类里以修改顶部和底部的左边的边框弧度,创建一个简单明了的平板式设计。

.container{

width:30%;

margin:0auto

}

.title{

background:#545965;

color:#fff;

padding:15px;

float:left;

position:relative;

-webkit-border-top-left-radius:5px;

-webkit-border-bottom-left-radius:5px;

-moz-border-radius-topleft:5px;

-moz-border-radius-bottomleft:5px;

border-top-left-radius:5px;

border-bottom-left-radius:5px

}

4.首先建一个白色的背景

.bar-unfill{height:15px;display:block;background:#fff;width:100%;border-radius:8px}

5.定义进度条的样式,先令他的宽度为100%,因为这也会应用于定义和未定义的部分。所以在我们的.bar-fill的类里,令他的宽度为0作为起始的宽度,添加CSS3的transition属性使动画效果更加流畅,最后,我们将添加CSS3里的animation属性,定义动画的名字,和duration和animation-iteration-count属性。

.bar-fill{

height:15px;

display:block;

background:#45c9a5;

width:0;

border-radius:8px;

-webkit-transition:width.8sease;

-moz-transition:width.8sease;

transition:width.8sease;

-webkit-animation:progressbar7sinfinite;

animation:progressbar7sinfinite

}

6.使用CSS3里的@keyframe规则来设置宽度从0变化到100%。你也能定制你自己喜欢的变化。

@-webkit-keyframesprogressbar{

from{

width:0

}

to{

width:100%

}

}

/*Standardsyntax*/

@keyframesprogressbar{

from{

width:0

}

to{

width:100%

}

}

7.条纹进度条,应该把.bar-fill重新命名为.bar-fill-stripes。使用backgrou-image属性里的linear-gradient同时声明它的颜色。剩余的CSS3动画效果也是和上述相同,看下面的代码:

.bar-fill-stripes{

height:15px;

display:block;

background:#e74c3c;

width:0;

border-radius:8px;

background-image:linear-gradient(-45deg,rgba(255,255,255,.2)25%,transparent25%,transparent50%,rgba(255,255,255,.2)50%,rgba(255,255,255,.2)75%,transparent75%,transparent);

-webkit-transition:width.8sease;

-moz-transition:width.8sease;

transition:width.8sease;

-webkit-animation:progressbar7sinfinite;

animation:progressbar7sinfinite

}

追踪

<divclass="container">

<divclass="title">Tracker</div>

<divclass="bar">

<spanclass="bar-unfill">

<spanclass="bar-fill-tracker"></span>

<spanclass="track-wrap">

<spanclass="track"></span>

</span>

</span>

</div>

</div>

8.最后产生动画效果

.track-wrap{

position:relative;

top:-18px;

-webkit-animation:progressbar27sinfinite;

animation:progressbar27sinfinite

}

.track{

height:20px;

display:block;

background:#e74c3c;

width:20px;

border-radius:10px;

position:relative;

left:-12px

}

@-webkit-keyframesprogressbar2{

from{

left:0

}

to{

left:100%

}

}

/*Standardsyntax*/

@keyframesprogressbar2{

from{

left:0

}

to{

left:100%

}

}

vc6.0里MFC进度条如何使用

演练CProgress

7.1

进度条的主要功能

进度条控制(Progress

Control)主要用来进行数据读写、文件拷贝和磁盘格式等操作时的工作进度提示情况,如安装程序等,伴随工作进度的进展,进度条的矩形区域从左到右利用当前活动窗口标题条的颜色来不断填充。

进度条控制在MFC类库中的封装类为CProgressCtrl,通常仅作为输出类控制,所以其操作主要是设置进度条的范围和当前位置,并不断地更新当前位置。进度条的范围用来表示整个操作过程的时间长度,当前位置表示完成情况的当前时刻。SetRange()函数用来设置范围,初始范围为0-100,

SetPos()函数用来设置当前位置,初始值为0,SetStep()函数用来设置步长,初始步长为10,StepIt()函数用来按照当前步长更新位置,OffsetPos()函数用来直接将当前位置移动一段距离。如果范围或位置发生变化,那么进度条将自动重绘进度区域来及时反映当前工作的进展情况。

进度条的对象结构

进度条控制的建立方法

CProgressCtrl

&ProgressCtrl

建立进度条控制对象结构

Create

建立进度条控制对象并绑定对象

进度条控制类CprogressCtrl::Create的调用格式如下:

BOOL

Create(

DWORD

dwStyle,

const

RECT&

rect,

CWnd*

pParentWnd,

UINT

nID

);

其中参数dwStyle用来确定进度条控制的控制风格;参数rect用来确定进度条控制的大小和位置;参数pParentWnd用来确定进度条父窗口指针;参数nID用来确定进度条控制的控制符ID值。

7.2

进度条控制的类属性

进度条控制的类属性包括设置进度条最大最小控制范围SetRange、设置进度条当前位置

SetPos、设置进度条当前位置偏移值OffsetPos和设置进度条控制增量值SetStep。

7.3

进度条控制的操作方法

进度条控制的操作方法主要是使进度条控制并重绘进度条的StepIt函数。

进度条控制的应用技巧示例

1、利用应用程序向导AppWizard生成基于对象框的应用程序CProgDlg;

2、在对话框中设置进度条和静态文本控制,其ID分别为IDC_PROG和IDCPERCENT;

在对话框初始代码中增加控制的范围和位置:

在ProgDlg.h中设置两个数据成员,用来表示进度条的最大值和步长:

//ProgDlg.h

class

CProgDlg:public

Cdialog

{

......//其它代码

public:

int

m_nMax,m_nStep;

......

//其它代码

}

(2)在ProgDlg.cpp中设置初始状态

BOOL

CProgDlg::OnInitDialog()

{

Cdialog::OnInitDialog();

......//其它代码

//TODO:Add

extra

initialization

here

CProgressCtrl

*pProgCtrl=(CProgressCtrl*)GetDlgItem(IDC_PROG);

pProgCtrl->SetRange(0,200);//设置进度条范围

......//其它代码

m_nMax=200;

m_nStep=10;

SetTimer(1,1000,NULL);//设置进度条更新时钟

return

TRUE;

}

(3)完善WM_TIMER消息处理,使进度条按照当前步长进行更新,同时完成进度条的百分比显示:

void

CProgDlg::OnTimer(UINT

nIDEvent)

{

//TODO:Add

your

message

handler

CProgressCtrl

*pProgCtrl=(CProgressCtrl*)GetDlgItem(IDC_PROG);

int

nPrePos=pProgCtrl->StepIt();//取得更新前位置

char

test[10];

int

nPercent=(int)(((nPrePos+m_nStep)/m_nMax*100+0.5);

wsprintf(test,%d%%,nPercent);

GetDlgItem(IDC_PERCENT)->SetWindowText(text);

Cdialog::OnTimer(nIDEvent);

}

非常感谢您的阅读!我们希望本文对于解决您关于c 进度条的问题提供了一些有价值的信息。如果您还有其他疑问,我们将很乐意为您提供进一步的帮助。

私有云公有云 谁能说说什么是私有云和公有云电信dns地址,电信dns是多少