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 :

Changer le texte du StatusBar de l'éxtérieur


Sujet :

MFC

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2008
    Messages : 354
    Par défaut Changer le texte du StatusBar de l'éxtérieur
    Bonjour,
    Je suis entrain de développez une application MFC.
    J'ai voulu appeler la barre d'état dans un autre classe(c'est à dire j'ai voulu changer le texte de la barre d'état dans une classe autre que CmainFrame)
    y a t il une solution pour faire ça.
    J'ai utilisé Visual Studio 2008.
    Merci pour votre aide

  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
    Par défaut
    salut,
    pense à consulter la faq : http://cpp.developpez.com/faq/vc/ind...CStatusBarMake

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2008
    Messages : 354
    Par défaut
    Bonjour,
    oui j'ai vu ce lien.
    Ce que je veux exactement est de modifier la barre d'état à partir de monapplicationdoc.cpp et n'estpas à partir de mainframe.cpp.
    La barre d'état n'est pas défini dans le Doc. Donc j'ai pas pu modifier le texte à partir du DOC
    Merci pour votre aide

  4. #4
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2010
    Messages : 248
    Par défaut Utilisation d'un message personnalisé
    Hello,

    J'ai eu ce problème et j'ai utilisé un message personnalisé, je ne sais pas si c'est la meilleure solution mais ça marche bien.

    J'ai défini un ID pour mon message (MainFrm.h):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define WM_STATUS_CHANGE WM_USER+100
    (voir http://cpp.developpez.com/faq/vc/?pa...PrivateMessage)

    Ensuite j'ai défini une fonction qui intercepte le message dans CMainFrm.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
     
     
    BEGIN_MESSAGE_MAP(CMainFrame, CFrameWndEx)
    	//{{AFX_MSG_MAP(CMainFrame)
    	//}}AFX_MSG_MAP
           ON_WM_CREATE()
            ...
    //Private message
    	ON_MESSAGE(WM_STATUS_CHANGE, &CMainFrame::OnStatusChange) 
    END_MESSAGE_MAP()
     
    ...
     
    //ON STATUS CHANGE MESSAGE
    //This message is received from other class for change Status bar text
    // wparam [in]: Contains the string for update the status bar
    // lparam [in]: Contains the status bar pane index to update.
     
    long CMainFrame::OnStatusChange(WPARAM wparam,LPARAM lparam)
    {
    	//Get the string
    	CString *stStatus = (CString*) wparam;
    	//get the index
    	int iIndex = (int) lparam;
    	//Check parameters and, if there are OK, update the status bar
    	if(!stStatus->IsEmpty() && (iIndex >= ST_STATUS) && (iIndex <= ST_ATR))		
    		this->SetStatus(*stStatus, iIndex);
     
    	return 0L;
    }

    Voici "l'appel" depuis une autre fonction, il faut préalablement récuperer un pointeur sur la MainFrame afin de pouvoir lui envoyer un message, d'autres possibilités sont dispos dans la FAQ.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    //Get a pointer to the mainframe for send message
    m_pTheFrame = (CMainFrame*)( AfxGetMainWnd()) ;
    if(m_pTheFrame != NULL) 
    {
       //post message
       m_csString = "Text à mettre dans la status bar";	
       m_pTheFrame->PostMessageA(WM_STATUS_CHANGE, (WPARAM)&m_csString, STATUS_BAR_INDEX1);
    }
    Voici encore le code de ma fonction SetStatus (que j'aurais pu appelé SetStatusText si j'étais un bon programmeur ):
    Tu pourra noter que j'ai ajouter un flag qui se met à TRUE uniquement lorsque la barre de status est crée ( dans CMainFrame::OnCreate), afin d'éviter une erreur si un appel a SetStatus est fait trop rapidement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void CMainFrame::SetStatus(CString st, int iIndex)
    {
     
    	if(!m_bIsStatusBarReady) return; //Flag set to TRUE when status bar is created
    	//Ici tu peux placer du code pour éventuellement modifier le texte 
            //dans un certain format, vérifier la validité de l'index, 
            //ou encore d'autres traitements. 
     
    	m_wndStatusBar.SetPaneText(iIndex, st);
     
    }
    En ésperant avoir pu t'aider. Désolé pour la conjugaison et l'orthographe, j'ai écrit ça rapidement

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2010
    Messages : 248
    Par défaut
    Petit commentaire par rapport à mon précédent post.
    Il serait plus simple de définir un fonction public dans CMainFrm et ensuite de l'appelée simplement depuis l'éxtérieur. Mais si je me rappelle bien (je l'ai implémenté il y a longtemps), cela générait une erreur d'assertion.

Discussions similaires

  1. Changer le texte de l'étiquette si formulaire mode "add
    Par rangernoir dans le forum Access
    Réponses: 8
    Dernier message: 23/09/2005, 09h28
  2. [Débutant]Changer du text dans un tableau
    Par Azimel dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 17/09/2005, 18h38
  3. changer le texte de tous les Items dans un mainmenu
    Par C.M dans le forum Composants VCL
    Réponses: 7
    Dernier message: 25/07/2004, 13h19
  4. [MFC] Changer le texte dans la barre de statut
    Par karl3i dans le forum MFC
    Réponses: 2
    Dernier message: 13/02/2004, 13h15

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