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 :

Récuperer le ScrollPos d'un CRichEdit


Sujet :

MFC

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 118
    Par défaut Récuperer le ScrollPos d'un CRichEdit
    Bonjour à tous,

    J'utilise un objet qui hérite d'un CRichEdit, dans lequel je dessine des trucs en plus du texte (des points d'arrêts, et ce genre de trucs).
    Bien sûr, quand l'utilisateur scroll le texte, le dessin doit suivre !
    Je récupère donc la position du scroll via un GetScrollPos() très classique au moment du OnPaint.

    Or, suivant la méthode pour scroller, ça ne marche pas bien.
    1) Si l'utilisateur scroll avec la molette de la souris, le dessin suit exactement le texte.
    2) Si l'utilisateur scroll avec les flèches de la scrollbar, tout va bien.
    3) Si l'utilisateur drague l'ascenseur de la scrollbar, le dessin reste à la même place, et n'est dessiné à la bonne place que lorsque le bouton de la souris est relâché.

    J'ai mis des traces pour surveiller ce qui ce passe, et il apparait qu'avec la méthode 3), la valeur retournée par GetScrollPos() est toujours la même tout au long du draguage (draguement ?), bien que le texte bouge correctement, lui.
    La valeur retournée par GetScrollPos() ne change qu'au relâchement de la souris...

    Du coup, c'est moche...

    Est ce que quelqu'un a déjà eu le même problème ?
    Il y a un autre message à écouter ?
    Une autre variable à lire ?

    Toutes les idées sont les bienvenues !

    Merci d'avance !

  2. #2
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    As-tu essayé plutôt d'intercepter les messages WM_HSCROLL ou WM_VSCROLL (cf. FAQ) ?
    Si ces messages sont disponibles, je trouve plus judicieux de les utiliser plutôt que de faire un GetScrollPos() dans le OnPaint().

  3. #3
    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
    Par défaut
    As-tu essayé avec GetScrollInfo (http://msdn.microsoft.com/en-us/libr...5a(VS.80).aspx) ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 118
    Par défaut
    As-tu essayé plutôt d'intercepter les messages WM_HSCROLL ou WM_VSCROLL (cf. FAQ) ?
    Si ces messages sont disponibles, je trouve plus judicieux de les utiliser plutôt que de faire un GetScrollPos() dans le OnPaint().
    Oui, j'ai essayé, mais le problème ne changeait pas, la valeur scrollPos ne bougeait pas !

    As-tu essayé avec GetScrollInfo (http://msdn.microsoft.com/en-us/libr...5a(VS.80).aspx) ?
    J'ai essayé, et le problème ne change pas.

    La solution que j'ai trouvée, est un peu tordue, mais je n'ai rien trouvé de mieux : comme j'ai remarqué que scrollPos ne se mettait à jour que sur un message du type SB_ENDSCROLL, chaque fois que j'ai besoin de la valeur de scrollPos, j'envoie ce message juste avant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GetRichEditCtrl().SendMessage( WM_VSCROLL, MAKEWPARAM( SB_ENDSCROLL, 0), 0L );
    Du coup, j'obtiens scrollPos est mis à jour, et a priori, je n'ai pas d'effet de bord.

    Je n'ai toujours pas le fin mot de l'histoire, mais au moins, ça fait ce que je veux !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/08/2007, 18h31
  2. récuperation d'un numéro de téléphone
    Par herzleid dans le forum Delphi
    Réponses: 4
    Dernier message: 17/07/2007, 09h25
  3. Problème : récuperer le texte d'un CRichEdit
    Par jawad91 dans le forum MFC
    Réponses: 2
    Dernier message: 27/03/2005, 14h19
  4. Récuperer une animation flash
    Par zoullou dans le forum Flash
    Réponses: 2
    Dernier message: 05/06/2003, 00h32
  5. Récuperer Arguments sur la ligne de commande ?
    Par Muetdhiver dans le forum x86 16-bits
    Réponses: 9
    Dernier message: 20/01/2003, 21h01

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