begin process at 2010 03 18 20:15:04
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

GUI

 > 

ListView Item survolé par la souris ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

ListView Item survolé par la souris ?

mercredi 6 juin 2007 à 21:58:12 | ListView Item survolé par la souris ?

Capa6T

Bonjour,

Comment peut-on récupérer l'item survolé par la souris dans un contrôle ListView ?
J'ai vu quelques sources qui font des calculs sur la position de la souris etc etc mais ça ne peut fonctionner que si la ListView n'a pas été Scrollé verticalement et c'est une technique un peu bourrine...
Je suis sur qu'il doit y avoir mieux....une idée ?

Merci.
mercredi 6 juin 2007 à 22:10:20 | Re : ListView Item survolé par la souris ?

Capa6T

Ok..ok, suis sur une piste => ListView_SubItemHitTest
Si je trouve je poste un bout de code, ça peut toujours servir...
samedi 9 juin 2007 à 10:18:36 | Re : ListView Item survolé par la souris ?

omnia

salut,
En sous classant ta liste view peut être, fait une recherche sur le site plusieurs sources en parlent

+
samedi 9 juin 2007 à 13:02:10 | Re : ListView Item survolé par la souris ?

Capa6T

Réponse acceptée !

OK, j'ai trouvé une solution... Gestion du message NM_HOVER.

Au départ, on a nôtre ListView (hWndListView) contenu dans une fenêtre Dialog (hDlg)
Il faut impérativement lui mettre le style LVS_EX_TRACKSELECT sinon pas de message NM_HOVER=>
 ListView_SetExtendedListViewStyleEx(hWndListView,0,LVS_EX_TRACKSELECT);

Si on veut, on peut gérer le temp de génération du message NM_HOVER comme suit:
ListView_SetHoverTime(hWndListView,500); // 500 ms

Puis dans le fenêtre Dialog on gère le message WM_NOTIFY comme suit: (pas de gestion sur le hWnd seule ma listview envoi WM_NOTIFY... si besoin utilisez (((LPNMHDR) lParam)->hwndFrom))

  case WM_NOTIFY:
  {
   switch (((LPNMHDR) lParam)->code)
   {
    // *************************
    // Mouse Over un Item

    case NM_HOVER:
    {
    WINDOWPLACEMENT PosWinLV; // Position ListView
    GetWindowPlacement(((LPNMHDR) lParam)->hwndFrom,&PosWinLV);
// Position ListView

    RECT rcDialog; // Taille Header Dialog
    GetWindowRect(hDlg,&rcDialog); // Position Dialog
    rcDialog.top+=4; 
// Décalage de 4 (Windows XP ?)

    RECT rcHead; // Taille Header ListView
    GetWindowRect(ListView_GetHeader(hWndListView),&rcHead); 
// Taille Header ListView

    POINT Souris=GetCursorPos(&Souris); // Position Souris

    LVHITTESTINFO ht;
    ht.pt.x=Souris.x-PosWinLV.rcNormalPosition.left; // Recalcule X
    ht.pt.y=Souris.y-PosWinLV.rcNormalPosition.top-(rcHead.bottom-rcHead.top)-rcDialog.top-ECART_Y;
// Recalcule Y

       int rval = ListView_SubItemHitTest(hLV, &ht);
      // RESULTAT
      // ht.iItem => n° Item survolé
      // ht.iSubitem => n° Subitem survolé

      }
   }
}

Voili...voilou....   ceci est une solution, il y en a bien d'autre comme sous-classer mais bon, je reste avec ma gestion simple de petits message windows....

PS: Pour le décalage de 4 pixels, je ne comprends pas de trop. Si ma fenêtre est maximisée, sa position initial est :
rcDialog.top=-4 ???

samedi 9 juin 2007 à 13:04:41 | Re : ListView Item survolé par la souris ?

Capa6T

Oups....juste pour dire, il y a une faute pour la souris, il faut lire:

POINT Souris;
GetCursorPos(&Souris);
// Position Souris
samedi 9 juin 2007 à 13:09:49 | Re : ListView Item survolé par la souris ?

Capa6T

Encore moi...hum désolé...

Il y a dans le code une constante ECART_Y.
Elle me sert suivant la plateforme sur laquelle mon soft tourne. Sous Windows XP je dois la positionner à 10 et sur Windows 2000 elle reste à zéro...bizarre ce décalage au niveau de l'écran....je comprends pas alors je palie à ça par une détection d'OS et je place ma constante (variable en fait ;-) en fonction.

Voila, c'est treminé, j'arrête...


Cette discussion est classée dans : listview, item, souris, survolé


Répondre à ce message

Sujets en rapport avec ce message

Couleur item dans un listview [ par kevinmitnik66 ] Salut à tous,une petite kestion, j'ai un listview et j'aimerais mettre seulment certaines lignes en couleur (rouge par ex) et non pas mettre toutes le recuperer texte d'une ListView [ par glipper ] Lol bonjour, (et vi encore moi, désolé :)Maintenant, j'essaie de récuperer le nom de l'item selectionné dans ma ListView. J'ai récuperé le numero de l Modification d'un item dans un listview [ par abdoulax ] Bon voilà une question tou bête pourtant ça fé un pti moment que je galaire dessus. En fait j'ai remplie mon listview avec des items, associé à une i Modifier hauteur item Listview [ par gagah1 ] Salut, Est-il possible de modifier la hauteur des items dans un Listview style REPORT comme fait LB_SETITEMHEIGHT en Listbox? Listview .net [ par DJ_FleX ] Bonjour, excuser mon debutantismeJe suis tombé par hasard sur comment ajouter un item a une listbox simple mais je n'ai pas trouvé comment ajouter d'i listview [ par deck_bsd ] Yop,Voila c'est p-e un bête truc , mais lorsque je rempli une listview,  elle se remplit dans l'ordre décroissant (du nouveau item au plus ancien) hor sélection dans une liste (sans souris) [ par michelmt ] Allo ,Encore moi !je suis bloqué sur un point .Comment puis-je faire sélecté un choix dans un (ListBox)sans la souris , je m'explique - le travaille c Gestion de la souris listview c++ api Win32 [ par Spunk62 ] Bonjour, je voudrai savoir comment récupérer la cellule d'une listview avec un click de la sourisvoila ce que j'ai fait:       case WM_LBUTTONUP:      recupere les item d'une colonne de ma listview [ par majestic3 ] Bonjour a tous, comment faire pour recuperer tous les elements d'une colonne d'une listview et les enregistrer dans une variable tablette graphique wacom bamboo alterner mode souris / stylet Code por gerer la tablette? [ par gregroar ] Bonjour voilà mon probleme: je souhaiterais pouvoir gerer moi meme les réglages de ma tablette graphique et recupérer notemment les clics gauche et le


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,123 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales