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 :

Problème de sélection d'un item dans une CListCtrl


Sujet :

MFC

  1. #1
    Membre éclairé
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Points : 749
    Points
    749
    Par défaut Problème de sélection d'un item dans une CListCtrl
    Bonjour,

    J'ai une grille CListCtrl les styles LVS_REPORT, LVS_SINGLESEL, LVS_SHOWSELALWAYS, et LVS_EX_FULLROWSELECT. Je la remplis dans le OnInitDialog de la fenêtre parent, et je place alors la sélection sur la première ligne de la grille.

    Normalement, lorsque la grille a le focus et qu'on utilise les touches flèches vers le bas ou vers le haut, la sélection se déplace sur la ligne suivante ou la précédente. Ca marche bien, SAUF la première fois.
    Lorsque la grille reçoit le focus pour la première fois et que j'appuie sur la flèche du bas, la sélection ne change pas. Il faut que j'appuie une deuxième fois pour que ça marche. Ensuite, ça marche à chaque fois, même si la grille perd et regagne le focus entre temps.

    Je me suis dit que si la grille avait bien le focus, ce n'était pas forcément le cas de la sélection. Du coup, j'ai voulu faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetItemState(GetNextSelectedItem(pos), LVIS_FOCUSED, LVIF_STATE)
    lorsqu'elle reçoit le focus, où pos est la position du premier item sélectionné.
    Mais ça ne change rien.

    Je pense qu'il s'agit d'une petite anomalie dans les MFC, mais je ne sais pas comment la résoudre. Quelqu'un aurait-il une idée ?

  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,
    essaye de renvoyer false dans OnInitDialog...
    http://c.developpez.com/faq/vc/?page...DialogSetFocus

  3. #3
    Membre éclairé
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Points : 749
    Points
    749
    Par défaut
    Ca ne change rien...

  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
    tu as fais un setfocus sur la ListCrtl dans OnInitDialog ?

  5. #5
    Membre éclairé
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Points : 749
    Points
    749
    Par défaut
    Non, non. ça se passe quand le focus est obtenu naturellement avec la touche "Tab".

  6. #6
    Membre éclairé
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Points : 749
    Points
    749
    Par défaut
    J'ai une idée : il faut que j'arrive à simuler un click sur un item de la grille. Par contre, je ne sais pas vraiment quel message utiliser...

  7. #7
    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 essaye ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    GetDlgItem(IDC_LISTCTRL)->PostMessage(WM_KEYDOWN,VK_DOWN); 
    GetDlgItem(IDC_LISTCTRL)->PostMessage(WM_KEYUP,VK_DOWN);

  8. #8
    Membre éclairé
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Points : 749
    Points
    749
    Par défaut
    Ah oui... C'est sans doute ça le plus simple.
    Merci Farscape, je vais essayer !

  9. #9
    Membre éclairé
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Points : 749
    Points
    749
    Par défaut
    Super, ça marche !
    La première fois que ma grille obtient le focus, je simule la frappe sur la flèche du bas. Evidemment, ça ne modifie pas la sélection, comme je l'expliquais dans l'ennoncé de mon problème, mais ça rend tout de suite la grille disponible au changement de sélection.
    Merci Farscape !

  10. #10
    Membre éclairé
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Points : 749
    Points
    749
    Par défaut
    En fait j'ai trouvé l'origine de ce problème. Et en corrigeant l'origine, je n'ai plus besoin de simuler la frappe sur la touche flèche vers le bas.
    L'origine c'est que je faisais une sélection initiale d'un item de la grille en utilisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_monCListCtr.SetItemState(nItem, LVIS_SELECTED, LVIS_SELECTED)
    Etant donné que ma grille a les styles LVS_REPORT, LVS_SINGLESEL, LVS_SHOWSELALWAYS et LVS_EX_FULLROWSELECT, la sélection initiale met en surbrillance une ligne de la grille. Mais en fait cette ligne n'a pas le focus.
    J'ai donc complété le code en mettant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_monCListCtr.SetItemState(nItem, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED)
    Et là, ça marche. Quand la grille reçoit le focus, la ligne en surbrillance reçoit immédiatement le focus, ce qui n'était pas le cas avant...

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

Discussions similaires

  1. Changer la couleur de sélection d'un Item dans une ListBox
    Par jo_la_pasteque dans le forum Windows Presentation Foundation
    Réponses: 0
    Dernier message: 16/04/2014, 16h16
  2. Sélection d'un item dans une GridView
    Par JavaBean dans le forum Android
    Réponses: 8
    Dernier message: 05/11/2013, 10h53
  3. Sélection d'un item dans une liste déroulante
    Par BizutAccess dans le forum IHM
    Réponses: 3
    Dernier message: 31/03/2011, 09h52
  4. recherche d'un item dans une ClistCtrl
    Par ledaker dans le forum MFC
    Réponses: 1
    Dernier message: 05/12/2005, 17h01

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