Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

[VC++][API]EXEMPLE DE PROGRESSBAR


Information sur la source

Catégorie :API Niveau : Expert Date de création : 16/06/2002 Date de mise à jour : 16/06/2002 19:10:26 Vu / téléchargé: 4 845 / 510

Note :
9 / 10 - par 5 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note

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

  • /*
  • 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
/*
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 !

 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de Xs le 16/06/2002 21:04:26

j'attend vos comments et une note pour fois !

signaler à un administrateur
Commentaire de mmuller57 le 17/06/2002 13:21:08

Avec des ressources càd ? Sinon le code impec.

signaler à un administrateur
Commentaire de maya75 le 24/05/2003 15:54:58

cool je voulais justement voir comment ça marche.

signaler à un administrateur
Commentaire de Iwin le 24/06/2003 01:03:39

Génial, après une demi-heure de recherche sur le net pour réussir à faire marcher une progress bar je tombe la dessus, et y montre tout !!!

signaler à un administrateur
Commentaire de Mr.X le 30/10/2003 17:12:22

je trouve ton code interresant mais la source et un peux en vrac, tu n'a pas bien espacer ton, je trouve cela dommage car tous est serez et donc illisible.

signaler à un administrateur
Commentaire de alain_g400 le 25/02/2004 12:22:30

bonjour,
je suis intéressé par votre source sur la progressbar
je voudrais savoir à à quoi correpsond IDC_PDL et IDC_PDL1 dans :

    hwndbar1 = GetDlgItem(DLwnd,IDC_PDL);
    hwndbar2 = GetDlgItem(DLwnd,IDC_PDL1);

Merci pour votre aide

signaler à un administrateur
Commentaire de alain_g400 le 25/02/2004 12:22:53

bonjour,
je suis intéressé par votre source sur la progressbar
je voudrais savoir à à quoi correpsond IDC_PDL et IDC_PDL1 dans :

    hwndbar1 = GetDlgItem(DLwnd,IDC_PDL);
    hwndbar2 = GetDlgItem(DLwnd,IDC_PDL1);

Merci pour votre aide

alain

alain_gray2004@yahoo.fr

signaler à un administrateur
Commentaire de hakim0 le 24/06/2006 14:18:21

Salut tous le mond :D :
    hwndbar1 = GetDlgItem(DLwnd,IDC_PDL);
    hwndbar2 = GetDlgItem(DLwnd,IDC_PDL1);
pour retourner le hwnd de la bare1 et la bare2.
pour les manipuler sans hwnd on ne peu rien faire :D
********************
le code ca marche bien bon prog, je trouve le niveaux du code ne correspond pas avec le niveaux "EXPERT" .
Respekt

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,156 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.