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

Visual C++ Discussion :

[MFC] Comment intercepter le message d'un slider ?


Sujet :

Visual C++

  1. #1
    Membre régulier Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Points : 99
    Points
    99
    Par défaut [MFC] Comment intercepter le message d'un slider ?
    Bonjour à tous,

    grace à Farscape et à
    http://c.developpez.com/faq/vc/?page...omboxInToolBar

    j'ai inséré un slider dans une toolbar.

    je lui ai donné un ID, et j'ai une procédure pour gérer une action sur ce slider.
    Mais quel message intercepter dans mon MESSAGE_MAP ?
    j'ai essayé un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	ON_CONTROL(TB_THUMBPOSITION,ID_NB_DIVISIONS,ChangerNombreDivisions)
    mais DebugView me dit :
    [3268] Warning: no message line prompt for ID 0x8050.
    quand je déplace le curseur

    (0x8050 est bien l'ID correct de mon slider)


    J'espère avoir été clair.
    Merci de vos réponses
    Philippe

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    sauf erreur de ma part un slider n'a pas ce genre de message mais .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    BEGIN_MESSAGE_MAP(CDlgAdvanced, CDialog)
        //{{AFX_MSG_MAP(CDlgAdvanced)
        ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDERPERF, OnReleasedcaptureSliderperf)
        //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
     
    void CDlgAdvanced::OnReleasedcaptureSliderperf(NMHDR* pNMHDR, LRESULT* pResult) 
    {
        // TODO: Add your control notification handler code here
     
        *pResult = 0;
    }

  3. #3
    Membre régulier Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Points : 99
    Points
    99
    Par défaut
    Encore tout bon Farscape
    Ca fonctionne comme cela :
    2 remarques cependant :

    1. d'après http://msdn2.microsoft.com/en-us/library/ekx9yz55.aspx

    TB_THRUMBPOSITION serait bien un message d'un slider

    2. ta solution permet de gérer le message lors du relachement du bouton de la souris. Mais d'après MSDN, TB_THRUMBTRACK est généré quand on fait glisser le slider (ce serait mieux dans mon cas)

    Qu'en penses-tu?
    Philippe

  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
    oui ,je n'avais pas verifié .
    en fait d'apres la doc il faut que tu intercepte le message ON_WM_VSCROLL() ou ON_WM_HSCROLL() suivant l'orientation de ton slider .
    apres dans ton message:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void CMyPanel::OnVScroll(UINT nSBCode,UINT nPos,CScrollBar *pScrollBar)
    {
    // get the scroll position
     
        switch(nSBCode)
        {
     
          case TB_THUMBPOSITION://....
        }
    }

  5. #5
    Membre régulier Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Points : 99
    Points
    99
    Par défaut
    Merci de ta réponse
    OK pour le principe, mais mon slider est créé dynamiquement (au moment de la création de sa toolbar)

    Comment intercepter le message WM_HSCROLL d'une fenetre dynamique?
    j'suis un peu perdu ...

    Philippe

  6. #6
    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
    c'est pas sur le slider mais sur la fenetre ou est situé la toolbar :la mainframe ou la mdichild...

  7. #7
    Membre régulier Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Points : 99
    Points
    99
    Par défaut
    OK, mais ça ne fonctionne pas :
    j'ai
    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
     
    BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
    	//{{AFX_MSG_MAP(CMainFrame)
    	ON_WM_CREATE()
    	ON_WM_PAINT()
    	ON_WM_CLOSE()
    	ON_WM_HSCROLL()
    	ON_WM_ACTIVATE()
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
     
    ......
     
    void CMainFrame::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
    {
    	// TODO: Add your message handler code here and/or call default
     
     
    if (nSBCode==TB_THUMBTRACK) nombreDivisions=2*(((CSliderCtrl*)pScrollBar)->GetPos()/2);
    TRACE1("Nombre de divisions : %d",nombreDivisions);
     
     
     
     
    	CFrameWnd::OnHScroll(nSBCode, nPos, pScrollBar);
    }
    mais je n'intercepte rien du tout ...

    Le message WM_HSCROLL de la mainframe n'est-il pas généré uniquement lorsque l'on joue avec l'ascenseur horizontal (s'il y en a un) de la fenetre de l'application?

    Philippe

  8. #8
    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
    c'est pour toutes les scrollbars.
    ton slider est horizontale ?

  9. #9
    Membre régulier Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Points : 99
    Points
    99
    Par défaut
    oui, il est horizontal :
    si je te comprends bien, CMainFrame::OnHScroll(...) devrait intercepter
    TOUS les messages d'elle même et de ses fillles, donc du slider
    car elle est la fille de la toolbar qui est la fille de la mainframe ?

    (je dois avoir quelques lacune basiques désolé)
    Philippe

  10. #10
    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
    oui c'est ça tu as tout compris
    le pointeur passé en argument permet d'identifier le contrôle .
    tu devrais regarder avec spy en selectionnant uniquement le message scroll
    pour voir si il passe bien...

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    je viens de faire l'essai rapide dans une dialogue on recoit bien le message HScroll et pScrollBar recoit bien l'adresse du slider...


  12. #12
    Membre régulier Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Points : 99
    Points
    99
    Par défaut
    Merci pour le temps passé...
    je n'ai plus qu'à creuser ça

    Bon week-end
    Philippe

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

Discussions similaires

  1. Comment Intercepter les messages Excel en .net
    Par la mouette dans le forum VB.NET
    Réponses: 1
    Dernier message: 19/10/2008, 21h07
  2. comment intercepter des messages e-mail?
    Par Just-Soft dans le forum Langage
    Réponses: 2
    Dernier message: 03/10/2008, 16h51
  3. Comment intercepter les messages d'un processus sous windows?
    Par Hamdi Hedhili dans le forum Général Java
    Réponses: 3
    Dernier message: 17/03/2008, 16h57
  4. Réponses: 4
    Dernier message: 04/02/2008, 19h54
  5. [MFC] Comment récupérer ce message ?
    Par julien.nasser dans le forum MFC
    Réponses: 15
    Dernier message: 24/05/2006, 11h38

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