IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

[MFC] afficher une ProgressBar dans une barre d'etat [FAQ]


Sujet :

MFC

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2003
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [MFC] afficher une ProgressBar dans une barre d'etat
    je voudrai afficher une progress bar dans la barre d'etat de la fenetre principale, or 2 problemes se posent :

    1. comment recupérer un pointeur sur la fenetre principale pour avoir acces à la barre d'état ?

    2. le constructeur (fct create) de la progress bar demande comme dernier parametre un identifiant, comment en creer un ?

    merci d'avance

  2. #2
    Membre habitué

    Inscrit en
    Mars 2002
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 83
    Points : 125
    Points
    125
    Par défaut Re
    CWnd* AfxGetMainWnd( ); Récupère le pointeur sur la status bar (m_wndStatusBar) et créer la progresse bare comme fenêtre fille de celle-ci.

    Créer un nouvel Id dans Onglet resource->resource symbols->New.

  3. #3
    Candidat au Club
    Inscrit en
    Mai 2003
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    j'ai fait ce que tu m'as conseillé mais la progress bar ne s'affiche pas. Voilà ce que j'ai tapé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	// barre d'etat de la fenetre princpipale
    	CMainFrame * MainFrame = static_cast<CMainFrame*>(AfxGetMainWnd()); 
    	CStatusBar * MyBar = MainFrame->GetStatusBar();
     
    	// barre de progression
    	CProgressCtrl ProgressBar;
    	CRect Rect;
    	MyBar->GetWindowRect(&Rect);
    	ProgressBar.Create(PBS_SMOOTH,Rect,(CWnd*)MyBar,ID_PROGRESS_BAR);
    ID_PROGRESS_BAR a été créé dans les ressources mais je crois que c'est ça qui ne fonctionne pas[/code]

  4. #4
    Membre habitué

    Inscrit en
    Mars 2002
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 83
    Points : 125
    Points
    125
    Par défaut Re
    Créer une classe dérivée de CStatusBar : C'est un exemple basique. A toi de l'adapter et de faire en sorte que ça soit propre.

    StaustCustom.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    // StatusBarCustom.cpp : fichier d'implémentation
    //
     
    #include "stdafx.h"
    #include "SDITest3.h"
    #include "StatusBarCustom.h"
     
     
    // CStatusBarCustom
     
    IMPLEMENT_DYNAMIC(CStatusBarCustom, CStatusBar)
    CStatusBarCustom::CStatusBarCustom()
    {
    }
     
    CStatusBarCustom::~CStatusBarCustom()
    {
    }
     
     
    BEGIN_MESSAGE_MAP(CStatusBarCustom, CStatusBar)
    	ON_WM_CREATE()
    	ON_WM_ACTIVATE()
    	ON_WM_SHOWWINDOW()
    	ON_WM_SIZE()
    END_MESSAGE_MAP()
     
     
     
    // Gestionnaires de messages CStatusBarCustom
     
     
    int CStatusBarCustom::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    	if (CStatusBar::OnCreate(lpCreateStruct) == -1)
    		return -1;
     
    	// Initialise controls
    	CRect rect( 0, 0, 100, 16);
    	m_Progress.Create( WS_VISIBLE | WS_CHILD, rect, this, IDC_PROGRESS );
    	m_Progress.SetRange( static_cast<short>(0), static_cast<short>(100) );
     
    	return 0;
    }
     
    void CStatusBarCustom::OnSize(UINT nType, int cx, int cy)
    {
    	CStatusBar::OnSize(nType, cx, cy);
     
    	// Initially create progress control in horizontal position
    	CWnd* pWnd = (CWnd*)this;
    	CRect rect;
    	pWnd->GetWindowRect( &rect );
    	ScreenToClient( &rect );
     
    	if( m_Progress.GetSafeHwnd())
    	{
    		m_Progress.SetWindowPos( &CWnd::wndTop, 0, 0, 100, 16, SWP_NOMOVE | SWP_NOZORDER);
    		m_Progress.SetPos( 16);
    	}
     
    }
    StatusCustom.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    #pragma once
     
     
    // CStatusBarCustom
     
    class CStatusBarCustom : public CStatusBar
    {
    	DECLARE_DYNAMIC(CStatusBarCustom)
     
    public:
    	CStatusBarCustom();
    	virtual ~CStatusBarCustom();
     
    protected:
    	CProgressCtrl 			m_Progress;
     
    	DECLARE_MESSAGE_MAP()
    public:
    	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    	afx_msg void OnSize(UINT nType, int cx, int cy);
    };

  5. #5
    Candidat au Club
    Inscrit en
    Mai 2003
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    merci ça marche bien

    @+

  6. #6
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 219
    Points : 226
    Points
    226
    Par défaut
    Bonjour,

    Je viens de suivre cette procédure pour mettre une barrer de progrès dans ma barre d'état.
    Ca fonctionne parfaitement. Mais je n'arrive pas à placer la progress bar autrement que statiquement. Peut-on la redéplacer à chaque redimensionnement de la fenêtre? Avec la fonction OnSize()?

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Afficher des messages dans une RichTextBox dans une FORM
    Par Poulki dans le forum C#
    Réponses: 1
    Dernier message: 12/05/2015, 10h19
  2. Réponses: 5
    Dernier message: 15/09/2011, 22h53
  3. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo