[vc++][api]exemple de progressbar

Description

Alors , étant donné que j'ai eu un mal fou a utiliser une ProgressBar avec la class créée pour, alors, voila, je donne un exemple, ainsi que la class modifié (il y avait quelques erreurs).
Le tout est aussi dans le Zip !

Source / Exemple :


/*
Le Programme Principal !!!

  • /
#include <windows.h> #include <commctrl.h> #include <stdlib.h> #include "progressbar.h" #include "resource.h" ProgressBar Bar; ProgressBar Bar1; HWND hwndbar1; HWND hwndbar2; LRESULT CALLBACK DlP(HWND DLwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_CLOSE: DestroyWindow(DLwnd); break; case WM_INITDIALOG: { InitCommonControls(); hwndbar1 = GetDlgItem(DLwnd,IDC_PDL); Bar.Init(hwndbar1); Bar.Hide(true); Bar.IsVisible(); Bar.SetRange(0,100); Bar.SetStep(0); hwndbar2 = GetDlgItem(DLwnd,IDC_PDL2); Bar1.Init(hwndbar2); Bar1.Hide(true); Bar1.IsVisible(); Bar1.SetRange(0,100); Bar1.SetStep(0); } break; case WM_DESTROY: PostQuitMessage(0); break; case WM_COMMAND: switch(HIWORD(wParam)) { case BN_CLICKED: switch(LOWORD(wParam)) { case ID_CANCEL: { DestroyWindow(DLwnd); } break; case ID_OK: { int i = 0; bool once = true; char iprint[4]; HDC hdc = GetDC(GetDlgItem(DLwnd,IDC_PDL)); RECT progress; RECT SizeText; GetClientRect(GetDlgItem(DLwnd,IDC_PDL),&progress); do { if (Bar.SetPos(i) == 100 && once) { MessageBox(DLwnd,"Barre n°1 arrivée à terme","Bravo !",0); once = false; } Bar.SetPos(i); Bar1.SetPos(i/2); itoa(i/2+1,iprint,10); if (i < 49) { DrawText(hdc, iprint, -1, &SizeText, DT_CALCRECT); SetBkColor(hdc,RGB(192,192,192)); SetTextColor(hdc,RGB(255,0,0)); } else { DrawText(hdc, iprint, -1, &SizeText, DT_CALCRECT); SetBkColor(hdc,RGB(0,0,128)); SetTextColor(hdc,RGB(255,255,255)); } TextOut(hdc,progress.right/2-(SizeText.right-SizeText.left)/2,progress.top+3,iprint,strlen(iprint)); /* pour centrer dans la barre : c'est plutôt précis car j'ai même été à mesurer la taille en pixel de iprint....
  • /
Sleep(10); i++; } while ( i< Bar1.MaxRan*2); } break; case ID_REBOOT: { Bar.SetPos(0); Bar1.SetPos(0); } break; } } break; default: return FALSE; } return FALSE; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HWND hdlg; MSG Msg; hdlg = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC) DlP); if(hdlg == NULL) { MessageBox(NULL, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK); return 0; } ShowWindow(hdlg, nCmdShow); UpdateWindow(hdlg); while(GetMessage(&Msg, NULL, 0, 0) > 0) { TranslateMessage(&Msg); DispatchMessage(&Msg); } return Msg.wParam; } /*La Class !*/ #ifndef __PROGRESSBAR_H #define __PROGRESSBAR_H #include <windows.h> #include <commctrl.h> class ProgressBar { private: HWND hBar; public: int MaxRan; int MinRan; BOOL Init(HWND hwndbar); //Initialise le controle BOOL SetRange(int nMinRange,int nMaxRange); //Définis la position Minimale et Maximale void Hide(BOOL bVisible); //Afiche ou Cache le controle BOOL IsVisible(void); //Détermine si le controle est visible int SetStep(int nStep); //Définis le pas int SetPos(int nPos); //Définis la valeur du controle int Increment(int nIncrement);//Incrémente de nIncrement la valeur du controle int IncrementStep(void);//Incrémente d'un pas définis par SetStep la valeur du controle }; BOOL ProgressBar::Init(HWND hwndbar) //Initialise le controle { hBar=hwndbar; if (hBar==NULL) { return FALSE; } return TRUE; } BOOL ProgressBar::SetRange(int nMinRange,int nMaxRange) //Définis la position Minimale et Maximale { if ((nMinRange<0) || (nMaxRange>65535)) { return FALSE; } if(SendMessage(hBar,PBM_SETRANGE,0,MAKELPARAM(nMinRange,nMaxRange))==0) { return FALSE; } MinRan = nMinRange; MaxRan = nMaxRange; return TRUE; } int ProgressBar::SetStep(int nStep) //Définis le pas { int nOldStep; nOldStep=SendMessage(hBar,PBM_SETSTEP,(WPARAM)nStep,0); return nOldStep; } int ProgressBar::Increment(int nIncrement) //Incrémente de nIncrement la valeur du controle { int nOldPos; nOldPos=SendMessage(hBar,PBM_DELTAPOS,(WPARAM)nIncrement,0); return nOldPos; } int ProgressBar::IncrementStep(void) //Incrémente d'un pas définis par SetStep la valeur du controle { int nOldPos; nOldPos=SendMessage(hBar,PBM_STEPIT,0,0); return nOldPos; } int ProgressBar::SetPos(int nPos) //Définis la valeur du controle { int nOldPos; nOldPos=SendMessage(hBar,PBM_SETPOS,(WPARAM)nPos,0); return nOldPos; } void ProgressBar::Hide(BOOL bVisible) //Afiche ou Cache le controle { if (bVisible==TRUE) { ShowWindow(hBar,SW_SHOW); } else { ShowWindow(hBar,SW_HIDE); } } BOOL ProgressBar::IsVisible(void) //Détermine si le controle est visible { return IsWindowVisible(hBar); } #endif

Conclusion :


pas de bugs trouvés !

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.