2024年10月vc6.0里MFC进度条如何使用?VC 进度条的实现

 更新时间:2024-10-12

  ⑴vc.里MFC进度条如何使用?VC进度条的实现

  ⑵vc.里MFC进度条如何使用

  ⑶演练CProgress.进度条的主要功能进度条控制(ProgressControl主要用来进行数据读写、文件拷贝和磁盘格式等操作时的工作进度提示情况,如安装程序等,伴随工作进度的进展,进度条的矩形区域从左到右利用当前活动窗口标题条的颜色来不断填充。进度条控制在MFC类库中的封装类为CProgressCtrl,通常仅作为输出类控制,所以其操作主要是设置进度条的范围和当前位置,并不断地更新当前位置。进度条的范围用来表示整个操作过程的时间长度,当前位置表示完成情况的当前时刻。SetRange()函数用来设置范围,初始范围为-,SetPos()函数用来设置当前位置,初始值为,SetStep()函数用来设置步长,初始步长为,StepIt()函数用来按照当前步长更新位置,OffsetPos()函数用来直接将当前位置移动一段距离。如果范围或位置发生变化,那么进度条将自动重绘进度区域来及时反映当前工作的进展情况。进度条的对象结构进度条控制的建立方法CProgressCtrl&ProgressCtrl建立进度条控制对象结构Create建立进度条控制对象并绑定对象进度条控制类CprogressCtrl::Create的调用格式如下:BOOLCreate(DWORDdwStyle,constRECT&rect,CWnd*pParentWnd,UINTnID);其中参数dwStyle用来确定进度条控制的控制风格;参数rect用来确定进度条控制的大小和位置;参数pParentWnd用来确定进度条父窗口指针;参数nID用来确定进度条控制的控制符ID值。.进度条控制的类属性进度条控制的类属性包括设置进度条最大最小控制范围SetRange、设置进度条当前位置SetPos、设置进度条当前位置偏移值OffsetPos和设置进度条控制增量值SetStep。.进度条控制的操作方法进度条控制的操作方法主要是使进度条控制并重绘进度条的StepIt函数。进度条控制的应用技巧示例、利用应用程序向导AppWizard生成基于对象框的应用程序CProgDlg;、在对话框中设置进度条和静态文本控制,其ID分别为IDC_PROG和IDCPERCENT;在对话框初始代码中增加控制的范围和位置:在ProgDlg.h中设置两个数据成员,用来表示进度条的最大值和步长://ProgDlg.hclassCProgDlg:publidialog{......//其它代码public:intm_nMax,m_nStep;......//其它代码}()在ProgDlg.cpp中设置初始状态BOOLCProgDlg::OnInitDialog(){Cdialog::OnInitDialog();......//其它代码//TODO:AddextrainitializationhereCProgressCtrl*pProgCtrl=(CProgressCtrl*)GetDlgItem(IDC_PROG);pProgCtrl-》SetRange(,);//设置进度条范围......//其它代码m_nMax=;m_nStep=;SetTimer(,,NULL);//设置进度条更新时钟returnTRUE;}()完善WM_TIMER消息处理,使进度条按照当前步长进行更新,同时完成进度条的百分比显示:voidCProgDlg::OnTimer(UINTnIDEvent){//TODO:AddyourmessagehandlerCProgressCtrl*pProgCtrl=(CProgressCtrl*)GetDlgItem(IDC_PROG);intnPrePos=pProgCtrl-》StepIt();//取得更新前位置chartest;intnPercent=(int)(((nPrePos+m_nStep)/m_nMax*+.);wsprintf(test,%d%%,nPercent);GetDlgItem(IDC_PERCENT)-》SetWindowText(text);Cdialog::OnTimer(nIDEvent);}

  ⑷CProgressCtrl*?pProgressCtrl;//获取或创建一个进度条//先演示动态创建pProgressCtrl?=?new?CProgressCtrl;pProgressCtrl-》Create(WS_CHILD|WS_VISIBLE|PBS_SMOOTH,?CRect(,,,),?AfxGetMainWnd(),?);?//?ID?=?//再演示获取pProgressCtrl?=?(CProgressCtrl?*)GetDlgItem(/*填写控件ID*/);//设置位置pProgressCtrl-》SetPos(...);

  ⑸c语言设计的系统中怎么设计进度条或者像是进度条的也行代码怎么写

  ⑹#include《stdio.h》

  ⑺#define?N?

  ⑻void?mBar(float?fBar)

  ⑼{?int?i,j,k,m;

  ⑽for?(?i=;i《N+;i++?)?printf(“b“);

  ⑾k=N*fBar;?m=fBar*;?printf(“[“);

  ⑿for?(?i=;i《k;i++?)?printf(“=“);

  ⒀for?(?j=;j《N-k;j++?)?printf(“?“);

  ⒁printf(“]%d%%“,m);

  ⒂void?delay(int?n)?{?int?i,j,k;?for?(?i=;i《n;i++?)?for?(?j=;j《xfff;j++?)?k++;?}

  ⒃void?main()

  ⒄for?(?i=,x=;i《;i++,x+=.?)?{?mBar(x);?delay();?}

  ⒅c#如何根据文件数量控制进度条

  ⒆说实话,关于进度条的解决方案很多,我暂且假定你在做Winform程序开发。

  ⒇如果你使用的StatusBar中的进度条的话,你可以不考虑多线程更新UI的问题,因为它本身已经在内部实现了外部线程更新UI控件的逻辑。但是如果你使用普通的Progressbar控件,那你就得自己处理这部分逻辑,因为控件只能在其所在的UI中更新,如果你想在其它线程中更新那你得用控件上的BeginInvoke方法,当然还有其它的解决方案。

  ⒈using?System;using?System.Drawing;using?System.IO;using?System.Windows.Forms;using?System.Threading;using?System.Threading.Tasks;namespace?AskAnswers{????public?class?ShowProgressStatus?:?Form????{????????[STAThread]????????static?void?Main()????????{????????????Application.Run(new?ShowProgressStatus());????????}????????public?ShowProgressStatus()????????{????????????Initializeponent();????????}????????///?《summary》????????///????Required?method?for?Designer?support?-?do?not?modify????????///????the?contents?of?this?method?with?an?editor????????///?《/summary》????????private?void?Initializeponent()????????{????????????this.ponents?=?new?System.ponentModel.Container();????????????this.label?=?new?System.Windows.Forms.Label();????????????this.progressBar?=?new?System.Windows.Forms.ProgressBar();????????????this.btnProcess?=?new?System.Windows.Forms.Button();????????????this.textBox?=?new?System.Windows.Forms.TextBox();????????????????????????//design?this.TrayHeight?=?;????????????//design?this.TrayLargeIcon?=?false;????????????//design?this.TrayAutoArrange?=?true;????????????label.Location?=?new?System.Drawing.Point(,?);????????????label.Text?=?“Progress?Value“;????????????label.Size?=?new?System.Drawing.Size(,?);????????????label.TabIndex?=?;????????????????????????progressBar.Maximum?=?;????????????progressBar.Location?=?new?System.Drawing.Point(,?);????????????progressBar.Minimum?=?;????????????progressBar.TabIndex?=?;????????????progressBar.Value?=?;????????????????//We?have?calculated?the?excat?size?which?will?result?in?only??boxes?to?be?drawn????????????????????????progressBar.Size?=?new?System.Drawing.Size(,?);????????????progressBar.Step?=?;????????????????????????btnProcess.Location?=?new?System.Drawing.Point(,?);????????????btnProcess.Size?=?new?System.Drawing.Size(,?);????????????btnProcess.TabIndex?=?;????????????btnProcess.Text?=?“Process“;????????????btnProcess.Click?+=?new?System.EventHandler(btnProcess_Click);????????????????????????textBox.Location?=?new?System.Drawing.Point(,?);????????????textBox.Text?=?““;????????????textBox.TabIndex?=?;????????????textBox.Size?=?new?System.Drawing.Size(,?);????????????this.Text?=?“Display?Progress?Status“;????????????this.AutoScaleBaseSize?=?new?System.Drawing.Size(,?);????????????this.ClientSize?=?new?System.Drawing.Size(,?);????????????this.StartPosition?=?FormStartPosition.CenterScreen;????????????????????????this.Controls.Add(textBox);????????????this.Controls.Add(label);????????????this.Controls.Add(btnProcess);????????????this.Controls.Add(progressBar);????????}????????void?btnProcess_Click(object?sender,?EventArgs?e)????????{????????????if?(isProcessRunning)????????????{????????????????MessageBox.Show(“A?process?is?already?running.“);????????????????return;????????????}????????????string?files?=?Directory.GetFiles(“c:“,?“*“);????????????var?filesCount?=?files.Length;????????????progressBar.Maximum?=?filesCount;????????????Thread.Sleep();????????????Thread?backgroundThread?=?new?Thread(????????????????new?ThreadStart(()?=》????????????????{????????????????????isProcessRunning?=?true;????????????????????for?(int?n?=?;?n?《?filesCount;?n++?)????????????????????{????????????????????????//?模拟拷贝文件过程?????????????????????????Thread.Sleep();????????????????????????Console.WriteLine(files[n]);????????????????????????progressBar.BeginInvoke(????????????????????????????new?Action(()?=》????????????????????????????????{????????????????????????????????????progressBar.Value?=?n?+?;????????????????????????????????}????????????????????????));????????????????????}????????????????????MessageBox.Show(“Thread?pleted!“);????????????????????progressBar.BeginInvoke(????????????????????????????new?Action(()?=》????????????????????????????{????????????????????????????????progressBar.Value?=?;????????????????????????????}????????????????????));????????????????????isProcessRunning?=?false;????????????????}????????????));????????????backgroundThread.Start();????????}????????private?System.Windows.Forms.Button?btnProcess;????????private?System.ponentModel.Container?ponents;????????private?System.Windows.Forms.TextBox?textBox;????????private?System.Windows.Forms.Label?label;????????private?System.Windows.Forms.ProgressBar?progressBar;????????private?bool?isProcessRunning;????}}

  ⒉方案:利用线程池(Task.StartNew())

  ⒊你只要把btnProcess_Click中的代码替换为下面的代码即可:

  ⒋void?btnProcess_Click(object?sender,?EventArgs?e){????if?(isProcessRunning)????{????????MessageBox.Show(“A?process?is?already?running.“);????????return;????}????Task《string》.Factory.StartNew(()?=》?{???????????isProcessRunning?=?true;???????????return?Directory.GetFiles(“C:“,?“*“);????????})????????.ContinueWith(files?=》?{????????????string?filesResult?=?files.Result;????????????progressBar.Maximum?=?filesResult.Length;????????????Console.WriteLine(“The?Maximum?of?Progress?Bar?“?+?progressBar.Maximum);????????????return?filesResult;????????})????????.ContinueWith(files?=》?{????????????string?filesResult?=?files.Result;????????????Console.WriteLine(“The?files?count?“?+?filesResult.Length);????????????for?(int?n?=?;?n?《?filesResult.Length;?n++?)????????????{????????????????//?模拟拷贝文件过程?????????????????Thread.Sleep();????????????????Console.WriteLine(filesResult[n]);????????????????progressBar.Value?=?n?+?;????????????}????????})????????.ContinueWith(files?=》?{????????????MessageBox.Show(“Thread?pleted!“);????????????progressBar.BeginInvoke(????????????????????new?Action(()?=》????????????????????{????????????????????????progressBar.Value?=?;????????????????????}????????????));????????????isProcessRunning?=?false;????????});}

  ⒌当然,你也可以通过BackgroundWorker来做,可能更简单一点儿,原理相同,你可以搜索一下相关方案。

  ⒍注意,我只是通过一个Thread.Sleep()来模拟你Copy文件的逻辑。

  ⒎使用C#显示进度条,涉及到多线程编程,我只探索了使用BackgroundWorker和Thread的方法,下面分别列出。第一种:使用BackgroundWorker进行进度条控制BackgroundWorker对象有三个主要的事件:DoWork-当BackgroundWorker对象的多线程操作被执行时触发。RunWokerpleted-当BackgroundWoker对象的多线程操作完成时触发。ProgressChanged-当BackgroundWorker对象的多线程操作状态改变时触发。WorkerReportsProgress-如果想让BackgroundWorker对象以异步的方式报告线程实时进度,必须将该属性的值设为true。BackgroundWorker对象的ReportProgress方法用于向主线程返回后台线程执行的实时进度。实例代码一,控制主窗体中的进度条显示[csharp]viewplaincopypublicpartialclassForm:Form{///《summary》///后台线程///《/summary》privateBackgroundWorkerbkWorker=newBackgroundWorker();///《summary》///步进值///《/summary》privateintpercentValue=;publicForm(){Initializeponent();bkWorker.WorkerReportsProgress=true;bkWorker.WorkerSupportsCancellation=true;bkWorker.DoWork+=newDoWorkEventHandler(DoWork);bkWorker.ProgressChanged+=newProgressChangedEventHandler(ProgessChanged);bkWorker.RunWorkerpleted+=newRunWorkerpletedEventHandler(pleteWork);}privatevoidbtnStart_Click(objectsender,EventArgse){percentValue=;this.progressBar.Maximum=;//执行后台操作bkWorker.RunWorkerAsync();}publicvoidDoWork(objectsender,DoWorkEventArgse){//事件处理,指定处理函数e.Result=ProcessProgress(bkWorker,e);}publicvoidProgessChanged(objectsender,ProgressChangedEventArgse){//bkWorker.ReportProgress会调用到这里,此处可以进行自定义报告方式this.progressBar.Value=e.ProgressPercentage;intpercent=(int)(e.ProgressPercentage/percentValue);this.label.Text=“处理进度:“+Convert.ToString(percent)+“%“;}publicvoidpleteWork(objectsender,RunWorkerpletedEventArgse){this.label.Text=“处理完毕!“;}privateintProcessProgress(objectsender,DoWorkEventArgse){for(inti=;i《=;i++){if(bkWorker.CancellationPending){e.Cancel=true;return-;}else{//状态报告bkWorker.ReportProgress(i);//等待,用于UI刷新界面,很重要System.Threading.Thread.Sleep();}}return-;}}

  ⒏这个实现的方法很多,可以用代理,BackgroundWorker,Task,Thread等等,但原理差不多,就是开一个新线程让其执行耗时操作,过程中异步更新UI界面。

  ⒐using?System;using?System.Drawing;using?System.IO;using?System.Windows.Forms;using?System.Threading;using?System.Threading.Tasks;namespace?AskAnswers{????public?class?ShowProgressStatus?:?Form????{????????[STAThread]????????static?void?Main()????????{????????????Application.Run(new?ShowProgressStatus());????????}????????public?ShowProgressStatus()????????{????????????Initializeponent();????????}????????///?《summary》????????///????Required?method?for?Designer?support?-?do?not?modify????????///????the?contents?of?this?method?with?an?editor????????///?《/summary》????????private?void?Initializeponent()????????{????????????this.ponents?=?new?System.ponentModel.Container();????????????this.label?=?new?System.Windows.Forms.Label();????????????this.progressBar?=?new?System.Windows.Forms.ProgressBar();????????????this.btnProcess?=?new?System.Windows.Forms.Button();????????????this.textBox?=?new?System.Windows.Forms.TextBox();????????????????????????//design?this.TrayHeight?=?;????????????//design?this.TrayLargeIcon?=?false;????????????//design?this.TrayAutoArrange?=?true;????????????label.Location?=?new?System.Drawing.Point(,?);????????????label.Text?=?“Progress?Value“;????????????label.Size?=?new?System.Drawing.Size(,?);????????????label.TabIndex?=?;????????????????????????progressBar.Maximum?=?;????????????progressBar.Location?=?new?System.Drawing.Point(,?);????????????progressBar.Minimum?=?;????????????progressBar.TabIndex?=?;????????????progressBar.Value?=?;????????????????//We?have?calculated?the?excat?size?which?will?result?in?only??boxes?to?be?drawn????????????????????????progressBar.Size?=?new?System.Drawing.Size(,?);????????????progressBar.Step?=?;????????????????????????btnProcess.Location?=?new?System.Drawing.Point(,?);????????????btnProcess.Size?=?new?System.Drawing.Size(,?);????????????btnProcess.TabIndex?=?;????????????btnProcess.Text?=?“Process“;????????????btnProcess.Click?+=?new?System.EventHandler(btnProcess_Click);????????????????????????textBox.Location?=?new?System.Drawing.Point(,?);????????????textBox.Text?=?““;????????????textBox.TabIndex?=?;????????????textBox.Size?=?new?System.Drawing.Size(,?);????????????this.Text?=?“Display?Progress?Status“;????????????this.AutoScaleBaseSize?=?new?System.Drawing.Size(,?);????????????this.ClientSize?=?new?System.Drawing.Size(,?);????????????this.StartPosition?=?FormStartPosition.CenterScreen;????????????????????????this.Controls.Add(textBox);????????????this.Controls.Add(label);????????????this.Controls.Add(btnProcess);????????????this.Controls.Add(progressBar);????????}????????void?btnProcess_Click(object?sender,?EventArgs?e)????????{????????????if?(isProcessRunning)????????????{????????????????MessageBox.Show(“A?process?is?already?running.“);????????????????return;????????????}????????????Task《string》.Factory.StartNew(()?=》?{???????????????????isProcessRunning?=?true;???????????????????return?Directory.GetFiles(“C:Windowssystem“,?“*“);????????????????})????????????????.ContinueWith(files?=》?{????????????????????string?filesResult?=?files.Result;????????????????????progressBar.Maximum?=?filesResult.Length;????????????????????Console.WriteLine(“The?Maximum?of?Progress?Bar?“?+?progressBar.Maximum);????????????????????return?filesResult;????????????????})????????????????.ContinueWith(files?=》?{????????????????????string?filesResult?=?files.Result;????????????????????Console.WriteLine(“The?files?count?“?+?filesResult.Length);????????????????????for?(int?n?=?;?n?《?filesResult.Length;?n++?)????????????????????{????????????????????????Thread.Sleep();????????????????????????Console.WriteLine(filesResult[n]);????????????????????????progressBar.Value?=?n?+?;????????????????????}????????????????})????????????????.ContinueWith(files?=》?{????????????????????MessageBox.Show(“Thread?pleted!“);????????????????????progressBar.BeginInvoke(????????????????????????????new?Action(()?=》????????????????????????????{????????????????????????????????progressBar.Value?=?;????????????????????????????}????????????????????));????????????????????isProcessRunning?=?false;????????????????});????????????????//?.Wait();????????????//?string?files?=?Directory.GetFiles(“c:“,?“*“);????????????//?var?filesCount?=?files.Length;????????????//?progressBar.Maximum?=?filesCount;????????????//?Thread.Sleep();????????????//?Thread?backgroundThread?=?new?Thread(????????????//?????new?ThreadStart(()?=》????????????//?????{????????????//?????????isProcessRunning?=?true;????????????//?????????for?(int?n?=?;?n?《?filesCount;?n++?)????????????//?????????{????????????//?????????????Thread.Sleep();????????????//?????????????Console.WriteLine(files[n]);????????????//?????????????progressBar.BeginInvoke(????????????//?????????????????new?Action(()?=》????????????//?????????????????????{????????????//?????????????????????????progressBar.Value?=?n;????????????//?????????????????????}????????????//?????????????));????????????//?????????}????????????//?????????MessageBox.Show(“Thread?pleted!“);????????????//?????????progressBar.BeginInvoke(????????????//?????????????????new?Action(()?=》????????????//?????????????????{????????????//?????????????????????progressBar.Value?=?;????????????//?????????????????}????????????//?????????));????????????//?????????isProcessRunning?=?false;????????????//?????}????????????//?));????????????//?backgroundThread.Start();????????}????????private?System.Windows.Forms.Button?btnProcess;????????private?System.ponentModel.Container?ponents;????????private?System.Windows.Forms.TextBox?textBox;????????private?System.Windows.Forms.Label?label;????????private?System.Windows.Forms.ProgressBar?progressBar;????????private?bool?isProcessRunning;????}}

  ⒑(来自网络)#include《windows.h》#include《mctrl.h》//InitmonControls//过程函数的返回值都是LRESULT,类型都是CALLBACKLRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam);intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPTSTRlpszCmdLine,intnCmdShow){HWNDhwnd;//主窗口句柄,在CreateWindow中赋值MSGmsg;//消息变量,在GetMessage中使用WNDCLASSwndclass;//窗口类TCHAR*szAppName=TEXT(ProgressBar);//类名和窗口名wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//窗口背景wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);//鼠标wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);//图标wndclass.lpszClassName=szAppName;//类名wndclass.cbClsExtra=;//类的额外参数wndclass.cbWndExtra=;//窗口的额外参数.用于基于同一窗口类的窗口各自区分.//在自定义对话框类时必须指定为DLGWINDOWEXTRA的大小wndclass.lpszMenuName=NULL;//菜单名.可以用作子窗口的idwndclass.style=CS_HREDRAW|CS_VREDRAW;//窗口风格wndclass.lpfnWndProc=WndProc;//窗口过程wndclass.hInstance=hInstance;//包含窗口过程的实例句柄if(!RegisterClass(&wndclass))//注册窗口类return;hwnd=CreateWindow(//创建窗口szAppName,//窗口类名szAppName,//窗口标题WS_OVERLAPPED|WS_SYSMENU|WS_MINIMIZEBOX,//窗口风格CW_USEDEFAULT,//初始的x坐标CW_USEDEFAULT,//初始的y坐标,//初始的宽度,//初始的高度NULL,//父窗口NULL,//菜单hInstance,//和窗口相关的实例句柄NULL//额外参数);ShowWindow(hwnd,nCmdShow);//显示窗口UpdateWindow(hwnd);//更新窗口while(GetMessage(&msg,NULL,,))//消息循环{TranslateMessage(&msg);//将WM_XXXKEYXXX消息翻译为WM_CHAR消息DispatchMessage(&msg);//传递消息到窗口过程}returnmsg.wParam;//返回}DWORDWINAPIPBThreadProc(LPVOIDlpParameter){HWNDhwndPB=(HWND)lpParameter;//进度条的窗口句柄PBRANGErange;//进度条的范围SendMessage(hwndPB,PBM_SETRANGE,//设置进度条的范围(WPARAM),(LPARAM)(MAKELPARAM(,)));SendMessage(hwndPB,PBM_GETRANGE,//获取进度条的范围(WPARAM)TRUE,//TRUE表示返回值为范围的最小值,FALSE表示返回最大值(LPARAM)&range);while(TRUE){SendMessage(hwndPB,PBM_DELTAPOS,//设置进度条的新位置为当前位置加上范围的/(WPARAM)((range.iHigh-range.iLow)/),(LPARAM));if(SendMessage(hwndPB,PBM_GETPOS,(WPARAM),(LPARAM))//取得进度条当前位置==range.iHigh){SendMessage(hwndPB,PBM_SETPOS,(WPARAM)range.iLow,(LPARAM));//将进度条复位}Sleep();//每秒更新一次进度条}}LRESULTWINAPIWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam){staticHWNDhwndPB;switch(message){caseWM_CREATE:{InitmonControls();//确保已注册了进度条类PROGRESS_CLASShwndPB=CreateWindowEx(,PROGRESS_CLASS,NULL,WS_CHILD|WS_VISIBLE,,,,,//位置和大小在WM_SIZE中设置hwnd,(HMENU),((LPCREATESTRUCT)lParam)-》hInstance,NULL);CreateThread(//操作进度条的线程NULL,,(LPTHREAD_START_ROUTINE)PBThreadProc,hwndPB,,);return;}caseWM_SIZE:{RECTrc;GetClientRect(hwnd,&rc);MoveWindow(hwndPB,rc.left,(rc.bottom-rc.top)/,rc.right-rc.left,(rc.bottom-rc.top)/,TRUE);return;}caseWM_DESTROY:PostQuitMessage();return;}returnDefWindowProc(hwnd,message,wParam,lParam);}可以用到资源文件(.rc)////(IFITISAVAILABLE)//CtrlProgressBar.exe.Manifest

  ⒒C语言做一个百分比进度条

  ⒓《p》您好,sa团队给出的答案《/p》《p》(由于本人不用做百分比进度条,所以从网上找了一个,不知道对不对,仅供参考《/p》《p》#!/bin/sh《br》off(){《br》echo-e“e[?l“《br》}《br》on(){《br》echo-e“e[?h“《br》}《br》gotoxy(){《br》echo-ne“e[$;$h“《br》}《br》character(){《br》gotoxy《br》echo“[“《br》gotoxy《br》echo“]“《br》n=《br》num=《br》while[$n!=]《br》do《br》sleep.《br》gotoxy$n《br》echo-en“e[;me[m“《br》gotoxy《br》echo-n“$num%“《br》num=$(echo“$n*.+“|bc)《br》((n++))《br》done《br》gotoxy《br》echo-n“.%“《br》}《br》clear《br》off《br》character《br》on《/p》《p》《/p》《p》《/p》《p》这里有一个网址,提供给您(cfm补丁.版,增加了进度条,百分比等内容的显示《/p》《p》:《ahref=

  ⒔如何用C语言实现进度条

  ⒕CreateWindow(PROGRESS_CLASS,NULL,WS_VISIBLE|WS_CHILD|PBS_SMOOTH,,,,,hwnd,(HMENU),((LPCREATESTRUCT)lParam)-》hInstance,NULL);相关消息PBM_GETPOS得到当前位置PBM_SETPOS设置当前位置并重画,指向这个位置PBM_GETRANG得到进度条范围PBM_SETRANG设置进度条范围PBM_SETRANG设置进度条范围PBM_SETSTEP设置步进长度PBM_STEPIT执行步进详细内容得看MSDN.c语言的话基本就是WINSDK了,翻MSDN吧

  ⒖程序:#include“stdio.h“#include《dos.h》#include《conio.h》/*去光标函数*/voidno_text_cursor(void){unionREGSr;r.h.ah=;r.h.ch=;int(x,&r,&r);}main(){inti;intbfb;charb=;charc=’%’;for(i=;i《=;i++){gotoxy(i,);/*为了能在进度条和百分比之间变动*/no_text_cursor();delay();/*前后两个delay是为了让滚动更好看,流畅*/printf(“%c“,b);delay();gotoxy(,);/*为了能在进度条和百分比之间变动*/bfb=((i*)/);printf(“%d“,bfb);gotoxy(,);printf(“%“);}printf(“

  ⒗LoadingSuessful!“);getch();}程序:#include《graphics.h》main(){intgdriver=DETECT,gmod,i;/*registerbgidriver(EGAVGA_driver);*/initgraph(&gdriver,&gmod,““);setlinestyle(,,);rectangle(,,,);setcolor(RED);sleep();for(i=;i《;++i){if(i==)break;line(+i,,+i,);delay();}getch();closegraph();}以上程序均在TC.下通过

您可能感兴趣的文章:

相关文章