Scroll dans un listview via SendMessage ?

Hell Dom Messages postés 11 Date d'inscription mercredi 18 février 2004 Statut Membre Dernière intervention 7 mars 2005 - 21 févr. 2005 à 14:26
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 18 mars 2005 à 14:59
Bonjour,


<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />


Voilà mon problème, je voudrais commander le scroll de mon propre listview (dérivé de la classe du même nom). Il faut apparemment utiliser SendMessage mais là, je patauge, me noie, bref ce n’est pas gagné. Vous n’auriez pas s.v.p., un lien qui explique comment ça marche, voir éventuellement un exemple de code ?





P.S : le truc qui me pose vraiment problème, c'est dans un premier temps quoi utilisé : SendMessage, SendMessageA, SendMessageByString ?


Ensuite: les paramètres…


C’est la première fois que j’utilise l’Api donc je vous prie de m’excuser si je raconte des conneries...

6 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
26 févr. 2005 à 12:04
Si ton but est de scroller jusqu'a un item particulier regarde donc ces methodes là :-)
ListView.EnsureVisible
ListViewItem.EnsureVisible

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
Hell Dom Messages postés 11 Date d'inscription mercredi 18 février 2004 Statut Membre Dernière intervention 7 mars 2005
2 mars 2005 à 23:18
Non je veux réelement pouvoir commander le scroll.

merci quand même
0
Hell Dom Messages postés 11 Date d'inscription mercredi 18 février 2004 Statut Membre Dernière intervention 7 mars 2005
7 mars 2005 à 01:09
Moi le truc qui m'intéresse c’est de déplacé le scroll horizontalement afin de pouvoir me positionner au début de chaque colonne de « mon listview »*.


* : mon listview, comprenez une classe dérivée de ListView.





J’arrive à utiliser des appelles du genre :





SendMessage(this.Handle, WM_HSCROLL, SB_PAGELEFT , 0);


SendMessage(this.Handle, WM_HSCROLL, SB_LINELEFT , 0);





Mais l’appelle suivant ne marche pas :





SendMessage(this.Handle, WM_HSCROLL, SB_THUMBPOSITION+ 0x10000 * posi, 0);



il est inspiré d'ici http://www.codeguru.com/forum/showthread.php?p=1027628








Je me dits c’est pas grave il y un autre moyen, alors je test :





protected override void WndProc(ref Message m)


{


switch(m.Msg)


{


case WM_HSCROLL:





ScrollInfoStruct si = new ScrollInfoStruct();


si.fMask = SIF_ALL;


si.cbSize = Marshal.SizeOf(si);


GetScrollInfo(m.HWnd, 0, ref si);


HScrollP=si.nPos


//OK ici je récupère bien les infos de la ScrollInfoStruct


if(test)


{


si.fMask = SIF_POS;


si.nPos = 100;


si.cbSize = Marshal.SizeOf(si);


SetScrollInfo(m.HWnd, WM_HSCROLL, ref si, true);


// Rien, le scroll ne bouge pas!!!


}


break ;


}


base.WndProc(ref m);


}

une idée sur le problème?
0
Hell Dom Messages postés 11 Date d'inscription mercredi 18 février 2004 Statut Membre Dernière intervention 7 mars 2005
7 mars 2005 à 14:37
Je viens d'essayer d’adapter ceci :


<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />

http://www.blogontheweb.com/jason_2004/archive/2004/04/26/7951.aspx

Sans succès
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Hell Dom Messages postés 11 Date d'inscription mercredi 18 février 2004 Statut Membre Dernière intervention 7 mars 2005
7 mars 2005 à 16:17
Ceci fonctionne,<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


SendMessage(this.Handle, LVM_SCROLL,(UInt32)pixelsToScroll,0);





Mais la chose qui m'ennuie, c’est qu’apparemment ça ajoute des pixels à la position actuelle du scroll et non à partir de la position 0.


Je me retrouve donc avec 2 appelles pour positionner mon scroll





int pixelsToScroll = 10;


SendMessage(this.Handle, WM_HSCROLL, SB_TOP , 0);


SendMessage(this.Handle, LVM_SCROLL,(UInt32)pixelsToScroll,0);





Je ne trouve pas cela vraiment génial…

Si vous avez une autre idée je suis preneur
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
18 mars 2005 à 14:59
Si tu veux positionner comme ça regarde plutot de côté de SetScrollPos .

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
Rejoignez-nous