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
Cacher une fenêtre MFC de la barre des taches [ par MangaII ]
Salut !Je cherche a cacher mon appli de la barre des taches ! c'est une appli MFC, je c la cacher, la réafficher, gérer le systray, mais pas chacher l
|
Derniers Blogs
ARTICLE DANS PROGRAMMEZ SUR LES PRINCIPES SOLIDARTICLE DANS PROGRAMMEZ SUR LES PRINCIPES SOLID par fathi
Hello tout le monde! J'ai pas pu blogger ces derniers temps car j'ai eu un (heureux) petit chamboulement dans ma vie perso (un "bug" de 3.8 kg et de 52 cm) J'en profite juste pour vous annoncer la parution d'un article sur les principes SOLID ...
Cliquez pour lire la suite de l'article par fathi PARUTION DE MON LIVRE SUR WPF 4PARUTION DE MON LIVRE SUR WPF 4 par odewit
La 2e édition de mon livre sur WPF sort aujourd'hui en version numérique et lundi en version papier :-)
L'ouvrage présente de façon approfondie les fonctionnalités de WPF 4 : graphisme 2D et 3D, animation, multimédia, interfaces utilisateur, databind...
Cliquez pour lire la suite de l'article par odewit EDM : COMMENT UTILISER L'HORIZONTAL ENTITY SPLITTINGEDM : COMMENT UTILISER L'HORIZONTAL ENTITY SPLITTING par Matthieu MEZIL
Une des raisons pour lesquelles j'adore l'Entity Framework est la puissance de son mapping. Beaucoup de développeurs pour ne pas dire la plus part n'en n'ont pas conscience. Pour rappel, j'ai réalisé des videos (en anglais) sur le mapping . Certains scena...
Cliquez pour lire la suite de l'article par Matthieu MEZIL [WP7DEV][REACTIVE] RENDRE LES REACTIVE EXTENSIONS PLUS STABLES[WP7DEV][REACTIVE] RENDRE LES REACTIVE EXTENSIONS PLUS STABLES par jay
Lorsque l'on développe des applications .NET, les exceptions non gérées dans des threads ont le désagréable effet de terminer le processus courant.
Dans l'exemple suivant.......(read more) ...
Cliquez pour lire la suite de l'article par jay
Forum
DE L'AIIIDE!!DE L'AIIIDE!! par eliramomo
Cliquez pour lire la suite par eliramomo
Logiciels
Microsoft Office (2010)MICROSOFT OFFICE (2010)Microsoft Office 2010 offre de nouveaux moyens flexibles et puissants pour optimiser votre travai... Cliquez pour télécharger Microsoft Office SeaMonkey (2.0.7)SEAMONKEY (2.0.7)Le projet SeaMonkey est issu d'un effort communautaire pour developper une application tout en un... Cliquez pour télécharger SeaMonkey Safari (5.0.2)SAFARI (5.0.2)Le navigateur d'Apple a lui aussi été mis à jour, aussi bien dans sa mouture Windows que celle po... Cliquez pour télécharger Safari Mozilla FireFox (4.0 béta 5)MOZILLA FIREFOX (4.0 BéTA 5)Firefox 4.0 béta 5
L'une des nouveautés visibles les plus attendues réside sans doute dans l'a... Cliquez pour télécharger Mozilla FireFox Mozilla Firefox (3.6.9)MOZILLA FIREFOX (3.6.9)Firefox 3.6.9 corrige les problèmes suivants :
* Introduced support for the X-FRAME-OPTION... Cliquez pour télécharger Mozilla Firefox
|