Evénement ListView onScroll
Je suis à la programmation d'une simple application en C#, et j'ai besoin événement onScroll sur la liste. J'ai donc créé la classe ListviewEx sorcière hérite d'origine ListView. J'ai trouvé comment détecter le message de défilement de WinAPI et j'ai modifié méthode WndProc.
Maintenant, j'ai ce WndProc:
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == WM_VSCROLL)
{
onScroll(this, new EventArgs());
}
}
Mais le problème, c'est que je ne sais pas comment faire pour détecter les informations au sujet de défilement. Ces données doivent être dans WParam, mais en C# est pas LOWORD macro comme en C++ et j'ai besoin de passer à détecter des paramètres comme SB_ BAS, SB_ ENDSCROLL, SB_PAGEUP etc.
Est-il de toute façon comment remplacer LOWORD macro en C# ?
Ou une autre façon de détecter les paramètres nécessaires à propos de défilement?
source d'informationauteur Klinki
Vous devez vous connecter pour publier un commentaire.
Vous pouvez définir WParam constantes comme suit:
Le code pour inspecter le WParam serait quelque chose comme ceci:
pinvoke.net est un excellent site pour obtenir les valeurs des constantes utilisées dans windows32 API sans avoir à inspecter les fichiers d'en-tête vous-même.
Voir cet exemple
Martijn réponse va fonctionner, mais ne sera pas attraper tous défilement. Le WM_VSCROLL message n'est envoyé lorsque l'utilisateur manipule la barre de défilement directement. Si l'utilisateur fait défiler à l'aide de la molette de la souris, ou utilise la flèche haut/flèche bas/PageUp/PageDown, puis le WM_VSCROLL ne sera pas envoyé.
Vous pouvez attraper de défilement qui est causée par la barre de défilement et par la molette de la souris en écoutant la LVN_BEGINSCROLL message de notification.
La capture de défilement qui se produit lors de l'utilisation des touches est plus difficile. Aucun message qui est envoyé au contrôle lorsqu'elle défile en réponse à une touche PageUp, par exemple. Le mieux qu'on puisse faire dans ce cas est d'écouter les événements de pression de Touche, puis vérifiez les modifications apportées à la barre de défilement positions avant et après l'événement.
Cela pourrait, bien sûr, être complète overkill à vos fins. Le WM_VSCROLL message peut être tout à fait suffisant pour ce que vous voulez. Mais si vous voulez attraper tous les possibles de défilement, regardez le code dans ObjectListView qui dispose déjà d'un événement Scroll qui attrape toutes ces possibilités.
@Klinki
Je vous remercie pour votre contribution cool
Je pense que vous avez oublié de poignée de défilement horizontale