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 :

acceder au control d'affichage de la barre d'état


Sujet :

MFC

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Par défaut acceder au control d'affichage de la barre d'état
    bonjour,

    dans la barre d'état de mon projet, j'ai un menu "affichage" et une option "barre d'état".. si cette ligne est décochée, la barre d'état doit s'enléver.. le problème est que là, c'est pas seulement ma barre d'était mais aussi toutes mes vues qui disparaissent (j'en ai 3 séparé par des splitters)... c'est comme si la fenetre ne se redessinait pas.. parce que si je change la taille de ma fenêtre, les vues réapparaissent(elles ont, elles, une méthode "onSize")...
    Comment je peux faire pour que les vues ne disparaissent pas?

  2. #2
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    Sans voir ton code je te dirai de faire un Invalidate() sur ce qui disparait pour forcer le redessinement , mais ce n'est pas forcément la meilleure solution surtout en terme de performances.

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Par défaut
    Citation Envoyé par TheGzD Voir le message
    Sans voir ton code je te dirai de faire un Invalidate() sur ce qui disparait pour forcer le redessinement , mais ce n'est pas forcément la meilleure solution surtout en terme de performances.
    je comprend pas ou je dois mettre le Invalidate()...

    et je ne peux pas vous montrer mon code parce que.. je sais pas vraiment quoi montrer... le menu que j'ai énoncé est généré automatiquement lorsque je crée mon projet.. du coup.. je sais vraiment pas quoi vous montrer..

    J'ai voulu ajouter un evenement quand on appui sur la commande du menu.. mais apparement elle passe pas dans la méthode (je l'ai essayée en débogage et quand j'appui sur "barre d'état" ca rentre pas la methode ON_COMMAND ... donc je sais pas du tout quel bout de code donner.. ni quel indice je peux vous passer pour qui vous puissiez m'aider

  4. #4
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    je comprend pas ou je dois mettre le Invalidate()...
    après avoir fait ton truc qui les efface, non ?

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Par défaut
    Citation Envoyé par TheGzD Voir le message
    après avoir fait ton truc qui les efface, non ?
    justement.. je ne sais pas ou ce trouve le truc qui les efface

  6. #6
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    dans la barre d'état de mon projet, j'ai un menu "affichage" et une option "barre d'état".. si cette ligne est décochée, la barre d'état doit s'enléver
    la barre d'état disparait par magie ?

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Par défaut
    Citation Envoyé par TheGzD Voir le message
    la barre d'état disparait par magie ?
    et bah je me pose la question ...
    non elle disparait pas par magie bien sur, mais c'est pas moi qui ais créé le menu avec "affichage" -> "barre d'état".... ca a été généré lors de la création du projet en + du petit bouton "?" et du "Fichier"->"Quitter"... et l'action d'enlever la barre d'état non plus c'est pas moi qui l'ai réaliser.. et j'arrive pas à trouver où c'est géré exactement.. ...

  8. #8
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    c'est pas moi qui ais créé le menu avec "affichage" -> "barre d'état".... ca a été généré lors de la création du projet
    ok alors cherche quel message est généré par cette option, ça devrait t'aider à comprendre mieux ce qui se passe et ainsi à surcharger la bonne méthode de ta dialog

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Par défaut
    Citation Envoyé par TheGzD Voir le message
    ok alors cherche quel message est généré par cette option, ça devrait t'aider à comprendre mieux ce qui se passe et ainsi à surcharger la bonne méthode de ta dialog
    justement j'essaie mais je n'arrive pas à retrouver quoique ce soit...
    je pensais que peut etre quelqu'un saurai où ca se trouvait...

  10. #10
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    Dans "Resource VIew" tu n'aurais pas le fameux menu par hasard ? si oui tu doit pouvoir avoir l'ID de l'option du menu. Avec cet ID tu dois pouvoir dans la classe de ta fenêtre principale rajouter la gestion de message suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ON_COMMAND(LA_FAMEUSE_ID, &CMaFenetrePrincipaleDlg::Lamethodequifaitréapparaitrelesvues)
    après jte promets pas que cette méthode se lance bien après la disparition et pas avant ... à tester.

    Courage

  11. #11
    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,
    la commande de menu de la barre d'état qui fait disparaitre la vue , je n'ai jamais vu ça.
    Et je ne vois par quel biais tu es arrivé à cette situation.
    Une copie écran avant /après permettrait peut être d'y voir plus clair.

    La commande peut être interceptée comme tous les items de menu par un message command_ui
    comme dans ce post de la faq:
    http://cpp.developpez.com/faq/vc/?pa...tusBarShowHide
    mais ça ne répond pas au problème de la vue qui disparait.
    Avec si peut d'éléments je ne pense pas que l'on puisse répondre .

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Par défaut
    Citation Envoyé par farscape Voir le message
    salut,
    la commande de menu de la barre d'état qui fait disparaitre la vue , je n'ai jamais vu ça.
    Et je ne vois par quel biais tu es arrivé à cette situation.
    et bien je ne sais pas non plus

    Citation Envoyé par farscape Voir le message
    La commande peut être interceptée comme tous les items de menu par un message command_ui
    oui, normalement.. j'ai suis allée sur le menu au niveau de "barre d'état" j'ai fais ajouté un gestionnaire d'évènement, ON_COMMAND.." je pensais comme je n'arrivais pas à retrouver ou se faisait le traitement, bah je peux toujours essayer de redessiner la vue une fois la barre d'état effacé.. mais tout ce que j'essayais.. donc je faisais par ex pour toutes mes vues:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void CArchGeodeApp::OnViewStatusBar()
    {
     
    CMainFrame* pFrame = static_cast<CMainFrame*>(AfxGetMainWnd());
     ((CArchGeodeView*)(pFrame->m_wndSplitter.GetPane(0,0)))->GetWindowRect(rectAGV);
    iWidth=rectAGV.right;
     iHeight=rectAGV.bottom;
     ((CArchGeodeView*)(pFrame->m_wndSplitter.GetPane(0,0)))->OnSize(SIZE_RESTORED,iWidth,iHeight);
     
    ...
    }
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void CArchGeodeApp::OnViewStatusBar()
    {
     
    CMainFrame* pFrame = static_cast<CMainFrame*>(AfxGetMainWnd());
    pFrame->SetWindowPos(NULL,0,0,rRect.Width(),rRect.Height(),SWP_NOMOVE|SWP_NOZORDER);
    ((CArchGeodeView*)(pFrame->m_wndSplitter.GetPane(0,0)))->SetWindowPos(NULL,0,0,(rRect.Width()*0,6),rRect.Height(),SWP_NOMOVE|SWP_NOZORDER);
     
    ...
    }
    bon.. j'essayais parce que j'avoue que je suis pas vraiment sur de ce que ca pouvais faire.. mais au final ça changeait rien.. j'ai essayé de faire apparaître un messageBox.. rien du tout.. et quand je suis passée en débogage j'ai vu que l'appli n'entrait pas dans ma méthode :'( .. ça m'avait déjà fait ça une fois parce que j'avais mis deux ON_COMMAND pour un même ID dans deux classe différentes et du coup ça marchait plus.. donc je suppose qu'il en existe déjà un autre quelque part mais j'arrive pas à le trouver..

    et pour précision..quand je redimensionne ma fenêtre mes vues réaparaisse (parce que j'ai des OnSize).. et du coup.. si, sans barre d'état on voit mes vues, lorsque je remets la barre d'état mes vues disparaissent aussi

    j'envoie deux imprim ecran. un avec barre d'état et un sans
    Images attachées Images attachées   

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Par défaut
    Citation Envoyé par TheGzD Voir le message
    Dans "Resource VIew" tu n'aurais pas le fameux menu par hasard ? si oui tu doit pouvoir avoir l'ID de l'option du menu. Avec cet ID tu dois pouvoir dans la classe de ta fenêtre principale rajouter la gestion de message suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ON_COMMAND(LA_FAMEUSE_ID, &CMaFenetrePrincipaleDlg::Lamethodequifaitréapparaitrelesvues)
    après jte promets pas que cette méthode se lance bien après la disparition et pas avant ... à tester.

    Courage
    oui, je suis allée chercher l'ID, je l'ai trouvé, j'ai fais une recherche ca m'a retrouvée l'ID dans une liste de commandes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CList<UINT, UINT> lstBasicCommands;
     
    lstBasicCommands.AddTail(ID_APP_EXIT);
    ...
    lstBasicCommands.AddTail(ID_APP_ABOUT);
    lstBasicCommands.AddTail(ID_VIEW_STATUS_BAR); // c'est cet ID
    lstBasicCommands.AddTail(ID_VIEW_TOOLBAR);
    ...
     
    CMFCToolBar::SetBasicCommands(lstBasicCommands);
    sauf que ça m'a envoyé nul part ailleurs.. en continuant à chercher j'ai du arrivée à un moment dans une classe "afxtoolbarcustomizedialog.h" j'arrive plus à retrouver comment j'y étais arrivée je suis désolée.. mais il y avait nul part l'ID que je cherchais et je me suis complètement perdu dans toutes ces classes

  14. #14
    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
    il serait pas mal de voir la portion de code qui initialise la barre d'état, et celle qui met en place le splitter.

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Par défaut
    Citation Envoyé par farscape Voir le message
    il serait pas mal de voir la portion de code qui initialise la barre d'état, et celle qui met en place le splitter.
    onCreateClient de MainFrame. pour les splitters
    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
     
    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
    {
    	// TODO : ajoutez ici votre code spécialisé et/ou l'appel de la classe de base
    	//creation des 2 partie principales
    	if (!m_wndSplitter.CreateStatic(this, 1, 2))
    	{
    		TRACE0("Failed to CreateStaticSplitter\n");
    		return FALSE;
    	}
     
    	//division de la fenetre de droite en 2 sous-parties
    	if(!m_wndSplitter2.CreateStatic(&m_wndSplitter,2,1,WS_CHILD | WS_VISIBLE | WS_BORDER,  
    		m_wndSplitter.IdFromRowCol(0, 1)))
    	{
    		TRACE0("Failed to CreateStaticSplitter2\n");
    		return FALSE;
    	}
     
    	//vue de la partie principale de gauche
    	if (!m_wndSplitter.CreateView(0, 0,
    		RUNTIME_CLASS(CArchGeodeView), CSize(500, 0), pContext))
    	{
    		TRACE0("Failed to create first pane\n");
    		return FALSE;
    	}
     
    	//vue de la sous-partie du haut
    	if (!m_wndSplitter2.CreateView(0, 0,
    		RUNTIME_CLASS(CServerView), CSize(0, 500), pContext))
    	{
    		TRACE0("Failed to create first pane2\n");
    		return FALSE;
    	}
     
    	//vue de la sous-partie du bas
    	if(!m_wndSplitter2.CreateView(1,0,RUNTIME_CLASS(CDetailZipView),CSize(0,0),pContext))
    	{
    		TRACE0("Failed to create second pane2\n");
    		return FALSE;
     
    	}
    	return TRUE;
    }
    pour la barre d'état...
    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
     
    //les indicators...
    static UINT indicators[] =
    {
     
    	ID_SEPARATOR, // indicateur de la ligne d'état
    	ID_STATUSBAR_PROGRESS,
    // 	ID_INDICATOR_CAPS,
    // 	ID_INDICATOR_NUM,
    // 	ID_INDICATOR_SCRL,
    };
     
     
     
    //dans le OnCreate
     
    m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT));
     
    ...
     
    if (!m_wndStatusBar.Create(this) && !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)))
    	{
    		TRACE0("Impossible de créer la barre d'état\n");
    		return -1;      // échec de la création
    	}
    .. après... je sais pas trop quoi ajouter... vous vouliez peut etre autre chose...

Discussions similaires

  1. Visual Studio 2008 - Affichage de la barre d'état
    Par edid dans le forum Visual Studio
    Réponses: 6
    Dernier message: 17/11/2010, 17h10
  2. Réponses: 5
    Dernier message: 24/05/2006, 13h34
  3. Affichage dans la barre d'état
    Par Prue dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 05/07/2005, 11h51
  4. 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
  5. 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

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