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] Barre d'état dont on peut modifier le contenu


Sujet :

MFC

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 22
    Points : 10
    Points
    10
    Par défaut [MFC] Barre d'état dont on peut modifier le contenu
    Bonjour a tous,

    Voila pour mon programme j'ai besoin d'afficher une barre d'etat dans ma frame principale pour y afficher des coordonnées remise a jour constamment mais je ne sais pas du tout comment m'y prendre

    Merci a ceux/celui qui voudra bien m'eclairer

  2. #2
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Hiko-seijuro

    n'cha - hoyoyo gang

    espace perso : http://hiko-seijuro.developpez.com
    dernier tuto : Introduction à l'éditeur de texte Emacs sous linux
    consulter les faqs : http://www.developpez.com/faq
    PAS DE QUESTIONS TECHNIQUES PAR MP OU MAIL

  3. #3
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Menu View/Resource symbols : ajoute un ID pour la barre d'état (ID_MY_STATUS_BAR)

    Utilise ClassWizard pour ajouter les gestionnaires des commandes du menu Affichage à la classe CMainFrame.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ID de l’objet          Message            Fonction membre
     
    ID_VIEW_STATUS_BAR     COMMAND            OnViewStatusBar
    ID_VIEW_STATUS_BAR     UPDATE_COMMAND_UI  OnUpdateViewStatusBar
    Modifie le fichier MainFrm.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
    static UINT indicators[] =
    {
    	ID_SEPARATOR,         
    	ID_SEPARATOR
    };
     
    ... CMainFrame::OnCreate (...)
    {
    ...
       if (!m_wndStatusBar.Create(this,WS_CHILD | WS_VISIBLE | CBRS_BOTTOM, ID_MY_STATUS_BAR) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators) / sizeof(UINT)))
       {
          TRACE0("Impossible de créer la barre d’état\n");
          return -1;  // échec
       }
    ...
    }
     
    void CMainFrame::OnViewStatusBar()
    {
       m_wndStatusBar.ShowWindow((m_wndStatusBar.GetStyle() & WS_VISIBLE) == 0);
       RecalcLayout();
    }
     
    void CMainFrame::OnUpdateViewStatusBar(CCmdUI* pCmdUI)
    {
       pCmdUI->SetCheck((m_wndStatusBar->GetStyle() & WS_VISIBLE) != 0);
    }
    Pour afficher par exemple les coordonnées du pointeur de la souris :
    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
    // CMyView.cpp
    #include "MainFrm.h"
     
    void CMyView::OnMouseMove(UINT nFlags, CPoint point)
    {
       CString     str;
       CMainFrame* pFrame = (CMainFrame*) AfxGetApp()->m_pMainWnd;
       CStatusBar* pStatus = &pFrame->m_wndStatusBar;
     
       if (pStatus)
       {
          str.Format("x = %d", point.x);
          pStatus->SetPaneText(0, str);
          str.Format("y = %d", point.y);
          pStatus->SetPaneText(1, str);
       }
    }

  4. #4
    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,
    voir aussi ce post (que je croyais dans la faq ):
    http://www.developpez.net/forums/vie...ht=setpanetext

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup c'est super sympa

    Vous faites du bon travail je teste ca de suite

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    J'ai bien ajouter l'id de ma bar via le view ressource mais je vois pas comment faire la manip dans le "gestionnaires des commandes" :$

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Heu personne pour m'aider ? Désolé de faire un up mais mon topic disparait tout en bas donc peut etre on passe a coté, il me faut juste une petite reponse

  8. #8
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    • Ctrl+W (classwizard)
      onglet Message Maps
      tu sélectionnes l'ID de la status bar
      tu crées les fonctions pour les messages COMMAND et UPDATE_COMMAND_UI

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    J'ai bien créer mon ID_MY_STATUS_BAR (value 101) via le menu View>Ressource symbols>

    Mais il n'aparait pas dans les messages map

  10. #10
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    dans le message maps ID_VIEW_STATUS_BAR

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    je n'ai pas non plu le ID_VIEW_STATUS_BAR

  12. #12
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    ID_VIEW_STATUS_BAR est l'ID de la barre d'état d'origine. on parle bien d'un projet SDI/MDI ??

    à la création du projet, tu n'as pas supprimé l'option qui propose la barre d'état par défaut ?

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Si j'ai virer la barre il me semble j'ai fait un projet des plus simple

  14. #14
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    si tu as un projet "Dialog Based", alors il n'y a pas de barre d'état

    si tu as fait un projet SDi ou MDI sans barre d'état, tu peux en ajouter une :

    - dans la string table, tu ajoutes un ID pour la barre d'état.

    - dans MainFrame.h, tu ajoutes le membre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CStatusBar  m_wndStatusBar;
    - dans MainFrame.cpp,

    tu définies la variables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    static UINT indicators[] =
    {
       ID_SEPARATOR,  // premier panneau de messages
       ID_SEPARATOR,  // second panneau de messages
    };
    tu ajoutes le code que je t'ai donné à mettre dans OnCreate(), puis la fonction OnMouse() si tu veux afficher les coordonnées du pointeur de la souris, ou une autre fonction qui agit sur la barre d'état

    - les fonctions OnViewStatusBar et OnUpdateStatusBar servent à gérer le menu Affichage > Barre d'état. pas utile si tu n'ajoutes pas ce menu. par contre si tu l'ajoutes, fodra mettre les fonctions à la main

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    En fait pour la barre elle marche le seul probleme c'est que c'est pas dans childview que je veux modifier la barre mais dans un listener c'est une fonction qui doit recevoir deux coordonnées en int et qui doit les afficher dans la barre d'états

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void CListener::MAJBarreEtat(UINT nFlags, int x, int y)
    {
    	CString     str; 
    	CMainFrame* pFrame = (CMainFrame*) AfxGetApp()->m_pMainWnd; 
    	CStatusBar* pStatus = &pFrame->m_wndStatusBar; 
     
    	if (pStatus) 
    	{ 
          str.Format("x = %d", x); 
          pStatus->SetPaneText(0, str); 
          str.Format("y = %d", y); 
          pStatus->SetPaneText(1, str); 
    	}
    }
    Je c'est pas si c'est bon je vois pas c'est quoi le UINT nflags

  16. #16
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    nFlags

    Indicates whether various virtual keys are down. This parameter can be any combination of the following values:

    MK_CONTROL Set if the CTRL key is down.


    MK_LBUTTON Set if the left mouse button is down.


    MK_MBUTTON Set if the middle mouse button is down.


    MK_RBUTTON Set if the right mouse button is down.


    MK_SHIFT Set if the SHIFT key is down.
    point

    Specifies the x- and y-coordinate of the cursor. These coordinates are always relative to the upper-left corner of the window.
    ce sont les 2 paramètres de OnMouseMove, ça ne veut pas dire qu'il faut obligatoirement les avoir dans la signature de la fonction qui modifiera la barre d'état.

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Bon il me reste plus qu'une erreur mais je vois pas d'ou ca peu venir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\Documents and Settings\CICM\Bureau\imageprocessing_mdi_vc6\ImageProcessing\Listener.cpp(186) : error C2601: 'MAJBarreEtat' : local function definitions are illegal
    Dans mon Listener.h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    protected:
        void MAJBarreEtat(int x, int y);
    Dans mon listener.cpp l'appel de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        MAJBarreEtat(x,y);
    Et la fonction elle même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void CListener::MAJBarreEtat(int x, int y)
    {
    	CString     str; 
    	CMainFrame* pFrame = (CMainFrame*) AfxGetApp()->m_pMainWnd; 
    	CStatusBar* pStatus = &pFrame->m_wndStatusBar; 
     
    	if (pStatus) 
    	{ 
          str.Format("x = %d", x); 
          pStatus->SetPaneText(0, str); 
          str.Format("y = %d", y); 
          pStatus->SetPaneText(1, str); 
    	}
    }
    Je vois pas ce que ca pourrais etre

  18. #18
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Citation Envoyé par Sh4rk
    Dans mon listener.cpp l'appel de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        MAJBarreEtat(x,y);
    est-ce la ligne 186 ?

    dans quelle fonction appelles-tu MAJBarreEtat ?

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    Dans Listener.cpp (comme MAJBarreEtat) :

    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
    void CListener::DoImageProcessing( smart_ptr<MemBuffer> pBuffer)
    {
     
    	// Get the bitmap info header from the membuffer. This contains the bits per pixel,
    	// width and height.
    	smart_ptr<BITMAPINFOHEADER> pInf = pBuffer->getBitmapInfoHeader();
     
    	BYTE* pImageData = pBuffer->getPtr();
     
    	// Calculate the size of the image.
    	int iImageSize = pInf->biWidth * pInf->biHeight * pInf->biBitCount / 8 ;
     
    	//Si l'etalonnage est requis
        if( m_bSaveImage  == true )
        {
    		//On teste si la memoire pour le buffer de l'image d'etalonnage est dèja alloué
            if( m_pImageData == NULL )
            {
                //Sinon on l'alloue
    			m_pImageData = new BYTE[iImageSize];
            }
     
    		//On copie le contenu du buffer de l'image dans un autre buffer inchangé
            memcpy(m_pImageData, pImageData,   iImageSize);
     
    		//On arrete la procedure d'étalonnage
            m_bSaveImage = false;
        }
     
    	//On teste si la memoire pour le buffer de l'image d'etalonnage est dèja alloué
        if( m_pImageData != NULL )
        {
    		// On fait maintenant une boucle pour changer les pixels
    		for( int i = 0; i < iImageSize; i++)
    		{
    			if(fabs(pImageData[i]-m_pImageData[i]) < 40)
    			{
    				pImageData[i] = 0;		
    			}
    			else
    			{
    				//On teste les coordonnées
    				pImageData[i] = 255;
    			}
    		}
     
    		MAJBarreEtat(i,i);
     
    	}
    En fait c'est un listener sur un grabber video, quand l'image est mise a jour cette procedure est appellée elle permet de detecter la position d'une personne en mouvement sur l'image de la camera. L'algorithme n'es pa terminé mais je voudrais pouvoir voir les coordonnées pour paufiner les calculs pour l'instant je souhaite juste afficher l'indice pour voir si ca marche.

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 22
    Points : 10
    Points
    10
    Par défaut
    La je n'ai plus aucune erreur j'ai oublier une { mais j'ai pas de texte qui s'affiche a en faite si j'ai une Debug assertion Failed lorsque le programme demande la fonction MAJBarreEtat()

Discussions similaires

  1. Barre d'état d'une application MFC
    Par moooona dans le forum MFC
    Réponses: 0
    Dernier message: 10/05/2010, 10h47
  2. la barre d'état...
    Par zarbiman dans le forum IHM
    Réponses: 3
    Dernier message: 14/06/2005, 08h56
  3. Affichage d'un texte dans la barre d'état!
    Par chuart dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 12/04/2005, 12h47
  4. Pb d'affichage dans barre d'état
    Par linou dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/04/2005, 11h21
  5. Réponses: 8
    Dernier message: 20/12/2004, 17h42

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