Accueil > > > PROGRESSBAR AVEC TEXTE [MFC]
PROGRESSBAR AVEC TEXTE [MFC]
Information sur la source
Description
une barre de progression avec texte... voici la réponse à plusieurs questions que j'avais posté il y a environ un an... pour cela je me suis inspiré du srce de Dr_Progz : http://www.cppfrance.com/code.aspx?ID=25840 mais je l'ai réécrit en POO et en utilisant les MFC... et y ai apporté qq modif (j'avais commencé simplement à rajouter ces modifs mais créer une nouvelle méthode global n'était pas très propre...) tant qu'a utiliser Visual, autant que ce faire ce peu, utiliser les MFC si qqn veux réutiliser ce srce en Win32, ben il n'a qu'a reprendre le srce de Dr_Progz et remplacer les différents éléments de la gestion du ON_PAINT
Source
- la classe :
- header
- _______________________________
- #ifndef BPROGESSTEXT_HPP
- #define BPROGESSTEXT_HPP
- #pragma once
-
- //gestion d'une progress Bar avec Texte
- class BProgressTxt : public CProgressCtrl
- {
- public:
- BProgressTxt()
- {
- }
- inline BOOL OnWndMsg( UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult );
- inline void StepIt(const char *text=NULL);
- inline void init(const unsigned int nbEvts=100,const char *text=NULL);
-
- private:
- CString m_Text;
- };
- #endif //BPROGESSTEXT_HPP
- _______________________________
- le srce :
- _______________________________
-
-
- inline BOOL BProgressTxt::OnWndMsg( UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult )
- {
- if (message == WM_GETDLGCODE)
- return DLGC_WANTALLKEYS;
- if (message == WM_PAINT)
- {
-
- /// algo : l'appel du pere est NOK si il y a d'autres trtts...
- /// algo : dessine la barre (autant le faire faire par le pere...)
- /// Nota : de plus si on le fait nous même, un .manifest éventuel serait ignoré
- /// Nota : ceci dit, on ne peux savoir la couleur de ce .manifest alors... code de remplissage laissé en commentaire
- // BOOL retour=CProgressCtrl::OnWndMsg( message, wParam, lParam, pResult );
- //*
- RECT rectZone, rectGauche, rectDroit;
- CRgn region;
- DWORD dwTextStyle = DT_CENTER | DT_VCENTER | DT_SINGLELINE;
- int nPos = GetPos();
- COLORREF crBarColour = GetSysColor(COLOR_HIGHLIGHT);
- COLORREF crBgColour = GetSysColor(COLOR_WINDOW);
-
- GetClientRect(&rectZone);
- rectGauche = rectDroit = rectZone;
-
- int inutil,lim;//inutil tjs à 0
- GetRange(inutil,lim);
- rectGauche.right = rectGauche.left + (int)((
- (rectGauche.right - rectGauche.left)
- * nPos) / lim);
-
- rectDroit.left = rectGauche.right;
-
- CClientDC dc(this);
- ///algo : Dessine la bar (à commenter)
- dc.FillSolidRect(&rectGauche, crBarColour);
- dc.FillSolidRect(&rectDroit, crBgColour);
-
- ///algo : Genere puis Affiche le texte
- CString szTexte;
- if(m_Text!="")
- if(nPos!=0)
- //wsprintf(szTexte, "Etat: %d%% - %s", nPos,(const char*)m_Text);
- szTexte.Format("%d%% - %s", nPos*100/lim,(const char*)m_Text);
- else
- //wsprintf(szTexte, "%s",(const char*)m_Text);
- szTexte.Format("%s",(const char*)m_Text);
- else
- if(nPos!=0)
- //wsprintf(szTexte, "Etat: %d%%", nPos);
- szTexte.Format("%d%%", nPos*100/lim);
- else
- //wsprintf(szTexte, "Prêt");
- szTexte="OK";
-
- dc.SetBkMode(TRANSPARENT);
- ///algo : Le blanc
- region.CreateRectRgn(rectGauche.left, rectGauche.top, rectGauche.right, rectGauche.bottom);
- dc.SelectClipRgn(®ion);
- dc.SetTextColor(crBgColour);
- dc.DrawText(szTexte, (int)lstrlen(szTexte), &rectZone, dwTextStyle);
-
- ///algo : Le bleu
- region.DeleteObject();
- region.CreateRectRgn(rectDroit.left, rectDroit.top, rectDroit.right, rectDroit.bottom);
- dc.SelectClipRgn(®ion);
- dc.SetTextColor(crBarColour);
- dc.DrawText(szTexte, (int)lstrlen(szTexte), &rectZone, dwTextStyle);
- //*
- return TRUE;
- // */ return false;//retour;
-
- }
- return CProgressCtrl::OnWndMsg( message, wParam, lParam, pResult );
-
-
- }
-
-
- inline void BProgressTxt::StepIt(const char *text)
- {
- if(text==NULL)
- m_Text = "";
- else
- m_Text = text;
- CProgressCtrl::StepIt();
- }
-
- inline void BProgressTxt::init(const unsigned int nbEvts,const char *text)
- {
- if(text==NULL)
- m_Text = "";
- else
- m_Text = text;
- SetPos(-1);
- SetStep(1);
- if(nbEvts==0)//pr tolérer err...
- SetRange32(0,1);
- else
- SetRange32(0,nbEvts);
- }
la classe :
header
_______________________________
#ifndef BPROGESSTEXT_HPP
#define BPROGESSTEXT_HPP
#pragma once
//gestion d'une progress Bar avec Texte
class BProgressTxt : public CProgressCtrl
{
public:
BProgressTxt()
{
}
inline BOOL OnWndMsg( UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult );
inline void StepIt(const char *text=NULL);
inline void init(const unsigned int nbEvts=100,const char *text=NULL);
private:
CString m_Text;
};
#endif //BPROGESSTEXT_HPP
_______________________________
le srce :
_______________________________
inline BOOL BProgressTxt::OnWndMsg( UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult )
{
if (message == WM_GETDLGCODE)
return DLGC_WANTALLKEYS;
if (message == WM_PAINT)
{
/// algo : l'appel du pere est NOK si il y a d'autres trtts...
/// algo : dessine la barre (autant le faire faire par le pere...)
/// Nota : de plus si on le fait nous même, un .manifest éventuel serait ignoré
/// Nota : ceci dit, on ne peux savoir la couleur de ce .manifest alors... code de remplissage laissé en commentaire
// BOOL retour=CProgressCtrl::OnWndMsg( message, wParam, lParam, pResult );
//*
RECT rectZone, rectGauche, rectDroit;
CRgn region;
DWORD dwTextStyle = DT_CENTER | DT_VCENTER | DT_SINGLELINE;
int nPos = GetPos();
COLORREF crBarColour = GetSysColor(COLOR_HIGHLIGHT);
COLORREF crBgColour = GetSysColor(COLOR_WINDOW);
GetClientRect(&rectZone);
rectGauche = rectDroit = rectZone;
int inutil,lim;//inutil tjs à 0
GetRange(inutil,lim);
rectGauche.right = rectGauche.left + (int)((
(rectGauche.right - rectGauche.left)
* nPos) / lim);
rectDroit.left = rectGauche.right;
CClientDC dc(this);
///algo : Dessine la bar (à commenter)
dc.FillSolidRect(&rectGauche, crBarColour);
dc.FillSolidRect(&rectDroit, crBgColour);
///algo : Genere puis Affiche le texte
CString szTexte;
if(m_Text!="")
if(nPos!=0)
//wsprintf(szTexte, "Etat: %d%% - %s", nPos,(const char*)m_Text);
szTexte.Format("%d%% - %s", nPos*100/lim,(const char*)m_Text);
else
//wsprintf(szTexte, "%s",(const char*)m_Text);
szTexte.Format("%s",(const char*)m_Text);
else
if(nPos!=0)
//wsprintf(szTexte, "Etat: %d%%", nPos);
szTexte.Format("%d%%", nPos*100/lim);
else
//wsprintf(szTexte, "Prêt");
szTexte="OK";
dc.SetBkMode(TRANSPARENT);
///algo : Le blanc
region.CreateRectRgn(rectGauche.left, rectGauche.top, rectGauche.right, rectGauche.bottom);
dc.SelectClipRgn(®ion);
dc.SetTextColor(crBgColour);
dc.DrawText(szTexte, (int)lstrlen(szTexte), &rectZone, dwTextStyle);
///algo : Le bleu
region.DeleteObject();
region.CreateRectRgn(rectDroit.left, rectDroit.top, rectDroit.right, rectDroit.bottom);
dc.SelectClipRgn(®ion);
dc.SetTextColor(crBarColour);
dc.DrawText(szTexte, (int)lstrlen(szTexte), &rectZone, dwTextStyle);
//*
return TRUE;
// */ return false;//retour;
}
return CProgressCtrl::OnWndMsg( message, wParam, lParam, pResult );
}
inline void BProgressTxt::StepIt(const char *text)
{
if(text==NULL)
m_Text = "";
else
m_Text = text;
CProgressCtrl::StepIt();
}
inline void BProgressTxt::init(const unsigned int nbEvts,const char *text)
{
if(text==NULL)
m_Text = "";
else
m_Text = text;
SetPos(-1);
SetStep(1);
if(nbEvts==0)//pr tolérer err...
SetRange32(0,1);
else
SetRange32(0,nbEvts);
}
Conclusion
utilisation:
créer une progressBar et redéfinir son type en CtextProgressBar
CtextProgressBar c_textProgress;
l'initialiser (non encore fait) c_textProgress.init(3);
puis aux instants désirés, faire
c_textProgress.StepIt("Debut"); .. c_textPr ogress.StepIt("Milieu"); .. c_textProgress.StepIt( "Fin");
______
nota: G po encore redéfini l'init, ça vient sous très peu... et MP n'est pas encore passé dessus...
++
Historique
- 03 septembre 2004 11:59:10 :
- lib completement fonctionnelle
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
MFC editeur de texte [ par hobbes ]
Bonjour,je suis entrain d essayer de faire un editeur de texte avec les MFC. Pour le moment, je peux ecrire du texte dans une fenetre mais je ne vois
Edit Box en MFC visual c++ [ par Rifo ]
Salut.Je suis débutant en C++, j'apprend pour mon plaisir avec une sorte deméthode en 21 lecon..J'ai fais un petit programme pour moi, qui est tout bê
texte d'une listeBox avec MFC [ par typhoun ]
Je code en C++ et j'ai créé un projet MFC Application. J'ai mis une listeBox dans une boite de dialogue, je voudrai récupérer
[MFC] Couleur d'un texte [ par ekinox17 ]
C'est simple, j'aimerai savoir comment changer la couleur d'un texte : je pensai pouvoir le faire avec un CFont : mais nan et je sais pas comment fair
affichage de texte sans mfc [ par Spiffou ]
bonsoir à tous...j'ai une petite question pour la communauté. j'ai un prog win32app en cpp developpé sur vc6 SANS MFC dans lequel je voudrais afficher
MFC lire un fichier texte ligne par ligne [ par mqsi ]
salut a tous,vs pouvez me dire comment lire un fichier texte ligne par ligne,puis recuperer chaque ligne ds un tableau,et merci pr l'aide,je travail a
lecture de fichier texte sur mfc [ par dissaben ]
Bonjour,Je suis sur un projet dans lequel je dois utiliser une base de donnée. Mais du fait que je n'aurai pa assez de tempsj'utilise plutot un fichie
MFC en C++ [ par ja92 ]
Bonjour ,Débutant en programmation je souhaite réaliser une application en MFC qui afficherait une fenetre avec un texte.Ce texte serait composé d' un
Prob Variables avec MFC [ par marcel6566 ]
Mon application est une MDI avec un Splitter. De chaque coté des boite de dialogue de type FORMVIEW.Je souhaite passer des variables d'une boite de di
progressbar in status bar,MFC VC++ [ par dorras7 ]
Salut, je veux ajouter un progressbar à status bar Est ce quelqu'un connait une méthode simple Merci
|
Derniers Blogs
TECHDAYS PARIS 2012 : COMMENT SHAREPOINT A SAUVé MES TECHDAYSTECHDAYS PARIS 2012 : COMMENT SHAREPOINT A SAUVé MES TECHDAYS par ROMELARD Fabrice
Speakers : Lionel Limozin et Alain Marty La session commence par une découverte de SharePoint à travers la mise en place d'un environnement SharePoint pour la gestion des Sessions animées par BeWise. Le besoin est très ba...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice PERSPECTIVE 3.0 POUR SILVERLIGHT 5.0PERSPECTIVE 3.0 POUR SILVERLIGHT 5.0 par odewit
Je viens de publier la version 3.0 de Perspective pour Silverlight, qui regroupe un portage sous Silverlight 5.0 des fonctionnalités de Perspective 2.0, le framework 3D de haut-niveau introduit récemment et de nouveaux exemples de code. En voici la li...
Cliquez pour lire la suite de l'article par odewit TECHDAYS PARIS 2012 : TOP 10 DES BEST PRACTICES POUR SQL SERVERTECHDAYS PARIS 2012 : TOP 10 DES BEST PRACTICES POUR SQL SERVER par ROMELARD Fabrice
Speaker : Nadia Ben El Kadi Configuration machine La session commence par la toute première question à se poser lors de la mise en place d'environnement SQL Server, la configuration des machines : Type de mac...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : KINECT + OFFICE 365 UN BON GESTE POUR VOTRE SITECHDAYS PARIS 2012 : KINECT + OFFICE 365 UN BON GESTE POUR VOTRE SI par ROMELARD Fabrice
Speakers : Fabrice Barbin, Samuel Blanchard, Julien Lo Presti Titre Prometteur et attractif invitant à voir comment lier le composant ludique Kinect dans le cadre d'une structure IT classique, notamment au travers de la plat...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : PLEINIèRE DU PREMIER JOURTECHDAYS PARIS 2012 : PLEINIèRE DU PREMIER JOUR par ROMELARD Fabrice
KeyNotes du premier jour pour les développeurs. La session est principalement axée sur une des principales directions prise par Microsoft à travers tous ses nouveaux produits : Cloud privé ou public (Solution Azure) ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
C++ C++ par yesoun1
Cliquez pour lire la suite par yesoun1 OPNETOPNET par hth21
Cliquez pour lire la suite par hth21 RE : ARBRE BINAIRERE : ARBRE BINAIRE par pacotheking
Cliquez pour lire la suite par pacotheking
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|