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 :

insérer du texte et une progress bar dans la barre d'état


Sujet :

MFC

  1. #1
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Points : 91
    Points
    91
    Par défaut insérer du texte et une progress bar dans la barre d'état
    Bonjour,

    J'aimerai qu'une progress bar apparaisse dans la barre d'état lorsqu'une méthode précises s'execute. pendant cette même méthode je voudrai aussi qu'un texte s'affiche et que je puisse le modifier au fur et à mesure du déroulement de la méthode...

    J'ai trouvé des liens vers FAQ et sur d'autres discussions du forum pour simplement "inserer" une progress bar ou du texte... mais ca marche pas.

    les deux liens:

    http://www.developpez.net/forums/d33...r-barre-detat/
    --> j'ai un probleme pour récupérer la statusBar de la MainFrame

    http://cpp.developpez.com/faq/vc/?page=CStatusBar
    --> ca me crée 230erreurs et "fatal error" sur des fichiers que je n'ai pas modifier

    quelqu'un pourrai m'aider??

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    si tu as des erreurs c'est qu'il doit te manquer des includes etc..
    quelle est la nature des erreurs ?

  3. #3
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Points : 91
    Points
    91
    Par défaut
    j'avais plutot espéré qu'on m'aide a faire ce que je veux sans partir des liens.
    Les liens c'etait juste une indication.

    pour les 230 erreurs je vais pas m'amuser a tous vous les citer, c'était juste pour informer les liens que j'avais visité au cas ou quelqu'un aurait une autre méthode.

  4. #4
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Points : 91
    Points
    91
    Par défaut
    Pour ce qui est du premier lien je l'ai dis, c'est un acces au statusBar du MainFrame, mais je pense c'est juste un probleme d'accesseur. je vais modifier et voir ce qui découle de ca.

    Pour le deuxieme liens, je n'ai plus les erreurs j'ai retirer ce que j'avais ajouté. et comme c'est pas une explication précise mais plus globale c'est pas celle que je vais prendre en priorité.

  5. #5
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Points : 91
    Points
    91
    Par défaut
    J'ai repris la méthode du premier lien:
    J'ai créé une classe CStatusBarEx issu de CStatusBar (si j'ai pas fait d'erreur)

    le .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
     
    #pragma once
    #include "afxext.h"
     
    class CStatusBarEx :
    	public CStatusBar
     
    {
    	DECLARE_DYNAMIC(CStatusBarEx)
    public:
    	CStatusBarEx(void);
    	~CStatusBarEx(void);
     
    protected:
    	CProgressCtrl 			m_Progress;
     
    	DECLARE_MESSAGE_MAP()
    public:
    	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    	afx_msg void OnSize(UINT nType, int cx, int cy);
    };
    le .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
    64
    65
    66
     
     
     
    // StatusBarEx.cpp : fichier d'implémentation
    //
     
    #include "stdafx.h"
    #include "StatusBarEx.h"
    #include "MainFrm.h"
    #include "ArchGeode.h"
     
     
    // CStatusBarEx
     
    IMPLEMENT_DYNAMIC(CStatusBarEx, CMFCStatusBar)
    CStatusBarEx::CStatusBarEx()
    {
    }
     
    CStatusBarEx::~CStatusBarEx()
    {
    }
     
     
    BEGIN_MESSAGE_MAP(CStatusBarEx, CStatusBar)
    	ON_WM_CREATE()
    	ON_WM_ACTIVATE()
    	ON_WM_SHOWWINDOW()
    	ON_WM_SIZE()
    END_MESSAGE_MAP()
     
     
     
    // Gestionnaires de messages CStatusBarCustom
     
     
    int CStatusBarEx::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 CStatusBarEx::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);
    	}
     
    }
    et dans ma classe d'application au niveau de "initInstance"
    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()); 
    		CMFCStatusBar* MyBar = MainFrame->GetStatusBar();
     
    		// barre de progression
    		CProgressCtrl ProgressBar;
    		CRect Rect;
    		MyBar->GetWindowRect(&Rect);
    		ProgressBar.Create(PBS_SMOOTH,Rect,(CWnd*)MyBar,IDC_PROGRESS);
    à ce moment là il n'y a pas d'erreur mais la progress bar ne s'affiche pas.

    si ensuite je remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CMFCStatusBar* MyBar = MainFrame->GetStatusBar();
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CStatusBarEx* MyBar= MainFrame->GetStatusBar();
    il y a une erreur disant qu'il est impossible de convertir de CMFCStatusBar* en CStatusBarEx*

    ... et je bloque ici...comment utiliser la classe que j'ai créé?

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    dans mon dernier tuto il y a tout un chapitre sur les nouvelles classes MFC ,sur le ruban la status bar etc.
    http://farscape.developpez.com/tutor...arrer-mfc-vc9/
    par contre je ne sais pas d'où tu prends la méthode GetStatusBar() elle n'existe pas dans CFrameWndEx.
    il me semble plus simple d'accéder directement à la donnée membre de la classe Mainframe .

  7. #7
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Points : 91
    Points
    91
    Par défaut
    Citation Envoyé par farscape Voir le message
    par contre je ne sais pas d'où tu prends la méthode GetStatusBar() elle n'existe pas dans CFrameWndEx.
    il me semble plus simple d'accéder directement à la donnée membre de la classe Mainframe .
    c'est moi qui l'ai créé la methode "GetStatusBar()" car il s'affichait un message d'erreur parce que je pouvais pas y acceder directement du fait qu'elle soit une variable membre en "protected"

    je vais regarder ton lien.

  8. #8
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    Citation Envoyé par leame Voir le message
    c'est moi qui l'ai créé la methode "GetStatusBar()" car il s'affichait un message d'erreur parce que je pouvais pas y acceder directement du fait qu'elle soit une variable membre en "protected"

    je vais regarder ton lien.
    ok je voulais avoir confirmation , si ton accesseur est correct il te suffit de caster le retour:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CMFCStatusBar* MyBar = static_cast<CMFCStatusBar*>(MainFrame->GetStatusBar());

  9. #9
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Points : 91
    Points
    91
    Par défaut
    Citation Envoyé par farscape Voir le message
    ok je voulais avoir confirmation , si ton accesseur est correct il te suffit de caster le retour:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CMFCStatusBar* MyBar = static_cast<CMFCStatusBar*>(MainFrame->GetStatusBar());
    .. je comprends pas pourquoi tu veux que je caste.. ma methode GetStatusBar() retourn un pointeur sur CMFCStatusBar... quand j'ecris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CMFCStatusBar* MyBar = mainFrame->getStatusBar();
    il n'y a pas d'erreur
    ... juste .. il n'y a aucune progress bar dans ma barre d'état..

  10. #10
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Points : 91
    Points
    91
    Par défaut
    je suis allée voir le tutoriel:
    http://farscape.developpez.com/tutor...arrer-mfc-vc9/

    Pour changer le texte:

    je sais pas si ca a un rapport avec le fait que ton exemple utilise des ruban et que moi j'ai simplement une appli standard sans ruban..
    mais.. ma méthode "OnCreate" elle contient pas du tout ce que tu as marqué :

    CString strTitlePane1;
    CString strTitlePane2;
    bNameValid = strTitlePane1.LoadString(IDS_STATUS_PANE1);
    ASSERT(bNameValid);
    bNameValid = strTitlePane2.LoadString(IDS_STATUS_PANE2);
    ASSERT(bNameValid);
    m_wndStatusBar.AddElement(new CMFCRibbonStatusBarPane(ID_STATUSBAR_PANE1, strTitlePane1, TRUE), strTitlePane1); m_wndStatusBar.AddExtendedElement(new CMFCRibbonStatusBarPane(ID_STATUSBAR_PANE2, strTitlePane2, TRUE), strTitlePane2);

    J'ai essayé de l'ajouté mais AddElement et AddExtendedElement ne sont pas reconnu..

    ensuite... j'ai pas de methode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CanSaveData(bool bSetFocus /*=false*/)
    {
    ...
    CMainFrame *pFrame=static_cast<CMainFrame*>(GetTopLevelFrame()); CMFCRibbonStatusBar *pBar=pFrame->GetRibbonStatusBar(); CMFCRibbonStatusBarPane *pPane=DYNAMIC_DOWNCAST(CMFCRibbonStatusBarPane,pBar->FindByID(ID_STATUSBAR_PANE1));
    ...
    }
    je l'ai créé manuellement... je sais pas si ca marche quand meme
    ..

    et il y a plusieurs erreur pour ma CMainFrame:
    pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CMFCRibbonStatusBar *GetRibbonStatusBar(){return &m_wndStatusBar;}
    ca me dit que je peux par convertir un CMFCStatusBar* en CMFCRibbonStatusBar* (puisque ma m_wndStatusBar est une CMFCFStatusBar)

    mais du coup si je change cette ligne par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CMFCStatusBar *GetRibbonStatusBar(){return &m_wndStatusBar;}
    ya d'autres erreurs qui apparaissent:
    GetRibbonStatusBar() et GetTopLevelFrame ne sont plus reconnus... surement parce que c'est pas des methode de CStatusBar... du coup je suis.. un peu perdu

  11. #11
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Points : 91
    Points
    91
    Par défaut
    OUBLIE CE QUE JE VIENS DE MARQUER!!

    J'ai pas du tout du tout réfléchi pour le texte. mille excuses.
    pour mon application seul un SetWindowsText suffit.. je savais pas que ca se faisait sur la barre d'état aussi (remarque c'est un control non? ..si oui j'aurai du le savoir..)

    bref le texte RESOLU
    ..
    il me manque plus que cette progess bar

  12. #12
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    arf c'est un peu la panique la ,
    pour le progress control tu dois utiliser la classe CMFCRibbonProgressBar et pas l'ancienne classe MFC.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // int cxProgress
            // BOOL m_bInfiniteProgressMode
     CMFCRibbonProgressBar* pProgressBar = new CMFCRibbonProgressBar(ID_STATUSBAR_PROGRESS, cxProgress);
    
            pProgressBar->SetInfiniteMode(m_bInfiniteProgressMode);
            pProgressBar->SetRange(0,200);
    
            pProgressBar->SetPos(200,true);
    et le controle doit être créé dynamiquement comme ci-dessus.

  13. #13
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Points : 91
    Points
    91
    Par défaut
    Citation Envoyé par farscape Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // int cxProgress
            // BOOL m_bInfiniteProgressMode
     CMFCRibbonProgressBar* pProgressBar = new CMFCRibbonProgressBar(ID_STATUSBAR_PROGRESS, cxProgress);
    
            pProgressBar->SetInfiniteMode(m_bInfiniteProgressMode);
            pProgressBar->SetRange(0,200);
    
            pProgressBar->SetPos(200,true);
    bonjour bonjour,

    J'ai essayé ce que tu m'as passé.. alors je suppose que ca c'est pour initialiser la progress bar.. seulement après faut que j'arrive à la mettre DANS la statusBar...
    donc j'ai ajouté ca à mon code:

    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
     
     
    static UINT indicators[] =
    {
     
    	ID_SEPARATOR, // indicateur de la ligne d'état
    	ID_STATUSBAR_PROGRESS, // indicateur de la progressBar
    	ID_INDICATOR_CAPS,
    	ID_INDICATOR_NUM,
    	ID_INDICATOR_SCRL,
    };
     
    //dans le OnCreate du mainFrame
    m_wndStatusBar.SetIndicators(indicators,
    		sizeof(indicators)/sizeof(UINT));
    bon là...ma progress bar ne s'affiche pas et les trois indices representant CAPS, NUM,SCRL dans la statusBar deviennent minuscule.. on voit plus du tout le contenu..

    Découverte!! (comme quoi un peu de repos...ca peu être benefique)
    dans ma MainFrame en fait, je n'ai pas une CStatusBar, mais une CMFCStatusBar... ce qui change tout du coup, la progressbar existe déjà:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CMainFrame * pFrame = static_cast<CMainFrame*>(AfxGetMainWnd());
    pFrame->GetStatusBar()->EnablePaneProgressBar(1,100);
    voila!!! et la ma progressBar apparait!!! mais.. a nouveau NUN, CAPS,SCRL ET ma progressbar sont tout petit!on voit rien.
    en rajoutant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pFrame->GetStatusBar()->SetPaneWidth(1,100);
    ma progressebar fait mantenant 100px mais quand je veux faire la meme chose pour les 3 autres ca marche pas aussi bien, ca fait des espaces tout noir au lieu de ce qu'il y a marqué d'habitude (et puis.. même si ca aurait marché.. je sais pas si c'est vraiment propre de faire comme ca:s)

    est-ce que quelqu'un sait comment faire pour que ca redevienne bien?

    bon en tout cas maintenant j'ai ma progressBar.. mais ca m'embete de pas avoir réussi de l'autre façon..

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/04/2009, 07h16
  2. ecrire variable dans une progress bar
    Par noakiss dans le forum VBA Access
    Réponses: 14
    Dernier message: 03/04/2008, 09h14
  3. [MySQL] comment insérer des données d'une liste déroulante dans un champ texte
    Par berti dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 23/01/2008, 09h12
  4. Insérer le texte d'une ComboBox dans une ListBox
    Par PascGuil dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 23/07/2007, 19h56
  5. progress bar dans une status bar ?
    Par raggadoll dans le forum C++Builder
    Réponses: 1
    Dernier message: 02/11/2005, 15h17

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