如何用C語言實現進度條
給題主一個簡單的進度條程序吧~
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
#defineLEN10/*進度條長度*/
intmain(void){
floatp;/*進度條刻度*/
floatprogLen;/*程序總耗時*/
inti,j;
progLen=15.0;
for(i=1;i<=progLen;i++){
system("cls");
p=(i/progLen)*LEN;/*計算程序當前進度之于進度條的比例*/
for(j=1;j<=(int)(p+0.5);j++)/*打印已執行刻度*/
printf("■");
for(j=1;j<=LEN-(int)(p+0.5);j++)/*打印待執行刻度*/
printf("□");
printf("%.1f%%",(i/progLen)*100);/*計算程序當前進度的百分比*/
Sleep(150);
}
putchar('\n');
getch();
return0;
}
運行結果
如何用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語言是無法實現的??梢允筕C++。Visual C++中的MFC類提供了標準的進度指示器控件(CProgressCtrl)。
m_progress->GetPos(); //獲取進度條的當前位置
m_progress->GetRange(int min,int max); //獲取進度條控件的范圍的下限和上限
m_progress->OfftPos(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);
}
或者采用在某種循環體內添加不斷更新進展條界面的方法
進度條的C語言
(來自網絡) #include <windows.h>
#include <commctrl.h> //InitCommonControls
//過程函數的返回值都是LRESULT,類型都是CALLBACK
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpszCmdLine,int nCmdShow)
{
HWND hwnd; //主窗口句柄,在CreateWindow中賦值
MSG msg; //消息變量,在GetMessage中使用
WNDCLASS wndclass; //窗口類
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 = 0; //類的額外參數
wndclass.cbWndExtra = 0; //窗口的額外參數.用于基于同一窗口類的窗口各自區分.
//在自定義對話框類時必須指定為DLGWINDOWEXTRA的大小
wndclass.lpszMenuName = NULL; //菜單名.可以用作子窗口的id
wndclass.style = CS_HREDRAW | CS_VREDRAW; //窗口風格
wndclass.lpfnWndProc = WndProc; //窗口過程
wndclass.hInstance = hInstance; //包含窗口過程的實例句柄
if( !RegisterClass(&wndclass) ) //注冊窗口類
return 0;
hwnd = CreateWindow( //創建窗口
szAppName, //窗口類名
szAppName, //窗口標題
WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX, //窗口風格
CW_USEDEFAULT, //初始的x坐標
CW_USEDEFAULT, //初始的y坐標
480, //初始的寬度
200, //初始的高度
NULL, //父窗口
NULL, //菜單
hInstance, //和窗口相關的實例句柄
NULL //額外參數
);
ShowWindow( hwnd,nCmdShow ); //顯示窗口
UpdateWindow( hwnd ); //更新窗口
while( GetMessage(&msg,NULL,0,0) ) //消息循環
{
TranslateMessage(&msg); //將WM_XXXKEYXXX消息翻譯為WM_CHAR消息
DispatchMessage(&msg); //傳遞消息到窗口過程
}
return msg.wParam; //返回
}
DWORD WINAPI PBThreadProc( LPVOID lpParameter )
{
HWND hwndPB = (HWND) lpParameter; //進度條的窗口句柄
PBRANGE range; //進度條的范圍
SendMessage( hwndPB, PBM_SETRANGE, //設置進度條的范圍
(WPARAM)0, (LPARAM)(MAKELPARAM(0,100)) );
SendMessage( hwndPB, PBM_GETRANGE, //獲取進度條的范圍
(WPARAM)TRUE, //TRUE 表示返回值為范圍的最小值,FALSE表示返回最大值
(LPARAM)&range );
while(TRUE)
{
SendMessage( hwndPB, PBM_DELTAPOS, //設置進度條的新位置為當前位置加上范圍的1/40
(WPARAM)((range.iHigh-range.iLow)/40), (LPARAM)0 );
if( SendMessage( hwndPB, PBM_GETPOS, (WPARAM)0, (LPARAM)0 ) //取得進度條當前位置
== range.iHigh )
{
SendMessage( hwndPB, PBM_SETPOS, (WPARAM)range.iLow, (LPARAM)0 ); //將進度條復位
}
Sleep(1000); //每1秒更新一次進度條
}
}
LRESULT WINAPI WndProc( HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam )
{
static HWND hwndPB;
switch( message )
{
ca WM_CREATE:
{
InitCommonControls(); //確保已注冊了進度條類PROGRESS_CLASS
hwndPB = CreateWindowEx(
0,
PROGRESS_CLASS,
NULL,
WS_CHILD | WS_VISIBLE,
0,0,0,0, //位置和大小在WM_SIZE中設置
hwnd,
(HMENU)0,
((LPCREATESTRUCT)lParam)->hInstance,
NULL);
CreateThread( //操作進度條的線程
NULL,
0,
(LPTHREAD_START_ROUTINE)PBThreadProc,
hwndPB,
0,
0
);
return 0;
}
ca WM_SIZE:
{
RECT rc;
GetClientRect(hwnd, &rc);
MoveWindow(
hwndPB,
rc.left,
(rc.bottom - rc.top )/4,
rc.right - rc.left,
(rc.bottom - rc.top )/10,
TRUE
);
return 0;
}
ca WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc( hwnd,message,wParam,lParam );
} 可以用到資源文件(.rc)
//
// SUPPORT FOR WINDOWS XP THEMES:
// THIS WILL MAKE THE PROGRAM USE THE COMMON CONTROLS
// LIBRARY VERSION 6.0 (IF IT IS AVAILABLE)
//
1 24 CtrlProgressBar.exe.Manifest
C語言進度條
C語言做一個百分比進度條
C語言做一個百分比進度條
本文發布于:2023-02-28 19:10:00,感謝您對本站的認可!
本文鏈接:http://m.newhan.cn/zhishi/a/167760130553343.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:c 進度條(c進度條控件).doc
本文 PDF 下載地址:c 進度條(c進度條控件).pdf
| 留言與評論(共有 0 條評論) |