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 :

Afficher un SCROLLBAR pour une View


Sujet :

MFC

  1. #1
    A_B
    A_B est déconnecté
    Membre du Club Avatar de A_B
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 153
    Points : 55
    Points
    55
    Par défaut Gestion d'une ScrollBar dans une SCrollView !!
    Bonjour
    Je suis un peu perdu , je voudrais affichier des informations dans une view mais j'aurai besoin d'un scrollbar comment proceder ?

    De l'aide SVP !
    Merci

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    Tu peux utiliser une CScrollView.

  3. #3
    A_B
    A_B est déconnecté
    Membre du Club Avatar de A_B
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 153
    Points : 55
    Points
    55
    Par défaut
    Oui mais comment je pars d'une View normale ou je pourrai effectuer mes changements ?
    J'ouvre l'application et je trouve directement une vue devant moi donc je travaille la dessus !
    Comment faire autrement ?

    Merci

  4. #4
    Membre confirmé Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Points : 521
    Points
    521
    Par défaut
    salut,

    dans le wizzard de création d'un projet MFC, dernière page, tu peux spécifier le type de vue que tu veux (par défaut, une simple CView)

    suffit de cliquer sur la classe "CChildView" et dans le menu déroulant choisir le type CScrollView...

    c'est le plus simple

    @+

  5. #5
    A_B
    A_B est déconnecté
    Membre du Club Avatar de A_B
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 153
    Points : 55
    Points
    55
    Par défaut
    Oui j'ai bien fais ça !
    Mais toujours ça ne donne rien pas de scroll bar sur le view malgré que j'ecris des choses dans la view qui depasse les limites de la view .

    Alors ..

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    Salut,

    Il me semble que dans ton cas c'est a toi de rajouter dans le style les scrollbar:
    Dans ta view (PreCreateWindows)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	cs.style |= WS_VSCROLL;
    	cs.style |= WS_HSCROLL;

  7. #7
    A_B
    A_B est déconnecté
    Membre du Club Avatar de A_B
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 153
    Points : 55
    Points
    55
    Par défaut
    J'ai reussi a mettre les scroll bars mais pour lemoment je galere pour les gerer car le texte se deforme quand je fait monter ou descendre la scroll bar !
    Je sais quoi faire là !

  8. #8
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    C'est peut être lié à l'affichage: le texte à l'ancienne place n'est pas effacé mais tu rajoutes juste le nouveau texte un peu au dessus (ou en dessous).

  9. #9
    A_B
    A_B est déconnecté
    Membre du Club Avatar de A_B
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 153
    Points : 55
    Points
    55
    Par défaut
    oui c'est ça je pense , mais comment faire pour eviter ça !
    En gros, quand je monte ou descend l'ascenceur faut tout réécrire , c'est ça ?
    Mais dans quelle fonction faut faire ça, et comment le faire ?

    Merci
    Images attachées Images attachées  

  10. #10
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    En toute logique tu dois gérer ton affichage dans CView::OnDraw. Je ne me souviens plus si tu dois demander la mise à jour lorsque tu fais le scroll ou si c'est fait automatiquement. Je ne pense pas que ce soit automatique, mais bon, à vérifier.
    Ensuite, lorsque tu demandes la mise à jour sur traitement du scrool, soit tu fais du brutal et tu redessines toute la partie visible de ta vue. Soit tu essayes d'optimiser les zones à rafraichir avec InvalidateRect ou InvalidateRgn. J'avoue, quant à moi, avoir toujours fait du brutal.

  11. #11
    Membre confirmé Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Points : 521
    Points
    521
    Par défaut
    Je ne me souviens plus si tu dois demander la mise à jour lorsque tu fais le scroll ou si c'est fait automatiquement.
    c'est fait automatiquement via la fonction ScrollWindow() par les MFC

    ce n'est pas un probleme d'effacement du fond, puisque c'est géré automatiquement par la WNDCLASS (par défaut)

    @A_B : montre nous ton code pour dessiner ton texte
    si tu utilises une CScrollView, il n'y a quasiment rien à faire, tout est géré en interne ... donc plus facile à utiliser, il n'y a pas
    un petit tour sur un bon tuto MFC serait judicieux ...

    @+

  12. #12
    A_B
    A_B est déconnecté
    Membre du Club Avatar de A_B
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 153
    Points : 55
    Points
    55
    Par défaut
    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
    void CFichierOKView::OnDraw(CDC* /*pDC*/)
    {
    	CFichierOKDoc* pDoc = GetDocument();
    	ASSERT_VALID(pDoc);
     
     
    	if (!pDoc)
    		return;
       	CDC *ptr = CScrollView::GetDC();
    	CString s;
    	 CString str;   
     
    	for(int i=0;i<50;i++)
    	{
    	s.Format(_T("%d"), i); 
    	str = _T("Reponse_")+s;
    	ptr->TextOutW(50,50+20*i,str);}
    	}
     
    void CFichierOKView::OnInitialUpdate()
    {
     
    	CSize sizeTotal;
    	sizeTotal.cx = sizeTotal.cy = 1000;
    	SetScrollSizes(MM_TEXT, sizeTotal);
    	CScrollView::OnInitialUpdate();
    }

  13. #13
    Membre confirmé Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Points : 521
    Points
    521
    Par défaut
    Il faut utiliser le paramètre pDC de la fonction OnDraw() !
    et supprimer cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CDC *ptr = CScrollView::GetDC();
    (en plus, tu ne liberais pas le DC par un ReleaseDC(), donc GDI leaks et gros plantage assuré après X affichages ...)

    sinon le reste ça a l'air ok !

    @+

  14. #14
    Membre confirmé Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Points : 521
    Points
    521
    Par défaut
    En gros, le code de OnDraw serait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void CFichierOKView::OnDraw(CDC *pDC)
    {
      for (int i=0;i<50;i++)
      {
        CString string;
        string.Format(_T("Reponse_%d"),i);
        pDC->TextOut(50,50+20*i,string);
      }
    }
    @+

  15. #15
    Membre confirmé Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Points : 521
    Points
    521
    Par défaut
    et la meme chose, de maniere optimisé (ne redessiner que ce qui est nécessaire) :

    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
     
    void CFichierOKView::OnDraw(CDC *pDC)
    {
      CRect rect;
      if (pDC->GetClipBox(rect)<=NULLREGION)
        return;  // rien à dessiner
     
      int ymin=(rect.top-50)/20;
      int ymax=(rect.bottom-50+19)/20;
     
      ymin=min(max(ymin,0),50);
      ymax=min(max(ymax,0),50);
     
      for (int i=ymin;i<ymax;i++)
      {
        CString string;
        string.Format(_T("Reponse_%d"),i);
        pDC->TextOut(50,50+20*i,string);
      }
    }
    @+

  16. #16
    A_B
    A_B est déconnecté
    Membre du Club Avatar de A_B
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 153
    Points : 55
    Points
    55
    Par défaut
    Enorme !!

    Merci beaucoup c'était ça au fait, le release!!

    Sinon comment faire pour ouvrir plusieurs documents en meme temps .
    Je me demande comment le faire et surtout ou le faire dans la classe View ou Doc ?

    Les documents je les créé suite a un appuie sur bouton, j'initialise leurs données et puis les affichier .

    Merci

  17. #17
    Membre confirmé Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Points : 521
    Points
    521
    Par défaut
    plusieurs doc en meme temps c'est plutot une application MDI alors que SDI

    MDI = Multiple Document Interface
    SDI = Single Document Interface

    sinon pas d'interet d'avoir plusieurs docs pour une SDI ...

    @+

  18. #18
    A_B
    A_B est déconnecté
    Membre du Club Avatar de A_B
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 153
    Points : 55
    Points
    55
    Par défaut
    Oui pardon au fait je suis en MDI !
    Et c'est tout l'interet de mon application qui doit générer des sujets aléatoirement donc fournir à la fois plusieurs documents (vues) .

  19. #19
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut, la FAQ parle de ça, ainsi que le tuto de farscape. En gros, tu construit un document, puis sa frame (la vue est alors créée). Je te conseil de jeter un coup d'oeil à la doc ce sera plus instructif.

  20. #20
    A_B
    A_B est déconnecté
    Membre du Club Avatar de A_B
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 153
    Points : 55
    Points
    55
    Par défaut
    OK, merci !

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

Discussions similaires

  1. Afficher le Classpath pour une classe lancée via un Jar
    Par newbeewan dans le forum Général Java
    Réponses: 2
    Dernier message: 02/02/2010, 17h36
  2. Initialiser un scrollbar pour une liste
    Par Erakis dans le forum MFC
    Réponses: 5
    Dernier message: 12/09/2008, 01h51
  3. [VBA-E] Pb de scrollbar pour une fenêtre rempli de façon dynamique
    Par cicdrek dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/01/2007, 17h15
  4. Afficher un etat pour une valeur d'un champ
    Par merilith dans le forum Access
    Réponses: 1
    Dernier message: 07/06/2006, 17h45
  5. Réponses: 2
    Dernier message: 10/06/2002, 11h03

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