-
Gestion des SCROLL
Bonjour à tous,
J'ai créé une fenêtre principale contenant une WS_VSCROLL ainsi qu'une autre WS_CHILD contenant elle même une WC_SCROLLBAR, toutes les deux à l'aide de CreateWindow, mais j'ignore comment gérer ces SCROLL.
J'ai trouvé les fonctions GetScrollInfo et SetScrollInfo fonctionnant avec la structure SCROLLINFO, mais ça ne marche pas, les curseurs restent toujours à la même place.
La taille de ma fenêtre principale étant plus grande que l'écran, je voudrais utiliser le premier afin de me déplacer verticalement dans celle-ci.
La deuxième se trouvant dans la fenêtre CHILD me permettrait de faire un déplacement de ce que j'affiche sur une autre fenêtre, il me faudrait donc pouvoir récupérer
la position curseur, ainsi que savoir à quel moment les flèches gauches et droites sont actionnées.
Quelqu'un pourrait m'indiquer les fonctions ainsi que les messages à utiliser?
Merci d'avance.
-
Pour commencer, il faut au moins déjà savoir que le contrôle scrollbar ne sert pas qu'à faire défiler le contenu d'une fenêtre et, le plus important, que pour faire défiler le contenu d'une fenêtre on n'a pas forcément besoin d'un scrollbar. Une application doit tout simplement fournir à l'utilisateur un moyen de naviguer dans la fenêtre (à l'aide des touches fléchées par exemple), et de réagir correctement en fonction de ses entrées. Pour faire défiler le contenu de la fenêtre, il suffit d'appeler ScrollWindow ou ScrollWindowEx. Le scrollbar est tout simplement le moyen privilégié donné à l'utilisateur pour le permettre de demander l'exécution d'un ScrollWindow(Ex). Quand l'utilisateur joue avec un scrollbar, le message WM_HSCROLL ou WM_VSCROLL est envoyé en fonction du type de scrollbar (horizontal ou vertical). C'est dans le traitement de ce message que tu dois appeler GetScrollInfo pour connaître la position actuelle du scrollbar et agir s'il le faut. SetScrollInfo ne t'es utile que lorsque tu veux positionner ton scrollbar depuis ton programme. Maintenant, consulter MSDN est la meilleure chose que tu puisses faire.
-
Bonjour et merci pour ta réponse,
Je connais très bien MSDN, j'y ai passé un certain moment avant de poster ce message.
Merci de me confirmer que ce sont bien ces fonctions qu'il faut utiliser, ainsi que la fonction ScrollWindow(Ex), je me doutais bien de la logique d'utilisation de ces fonctions, mais mon souci, c'est que je n'arrive pas à les faire marcher correctement, serait-il possible de m'indiquer que faut-il mettre précisément dans les termes de la structure SCROLLINFO, ainsi que les termes lpRect et lpClipRect, (je pense que c'est là que je me plante) ou de me fournir un petit exemple?
Pour info, je tiens vraiment à afficher les Scrollbar, et j'aimerais aussi qu'elles soient proportionnelles à la taille de ma fenêtre (si tenté que la fonction SetScrollInfo ne le fait pas).
Merci d'avance.
-
Ça y est, j'ai réussi à incorporer la fonction ScrollWindow dans mon programme, et elle marche parfaitement avec les messages WM_VSCROLL, WM_HSCROLL et les wParam SB_LINEUP , SB_PAGEUP SB_LINEDOWN, SB_PAGEDOWN et SB_ENDSCROLL. J'arrive à bien déplacer ma fenêtre comme je le souhaite. Merci à Melem pour me l'avoir indiquée.
Mais il me reste encore la gestion du curseur scroll, que je n'arrive pas à faire, il reste toujours immobile quoique je fasse.
Si quelqu'un pouvait m'indiquer la marche à suivre avec les fonctions SetScrollInfo et GetScrollInfo... :lol:
Merci d'avance.
-
Il suffit d'un ajouter un traitement personnalisé de l'événement SB_THUMBTRACK. Traiter ce message permet de synchroniser le mouvement du curseur et le défilement de la fenêtre. Appuie-toi toujours sur MSDN et poste le code complet de ta dernière tentative si ça ne marche toujours pas.
-
Bonsoir,
C'est bon, j'ai réussi à avoir ce que je voulais, il fallait en effet que j'utilise SB_THUMBTRACK, mais mon problème principal, c'est que je ne prenais pas le LOWORD du wParam, mais le wParam tout court, ce qui faisait que mon switch(wParam) ne passait jamais pas SB_THUMBTRACK, merci aux breakpoints qui m'ont finalement permis de le voir :roll:
Cependant je te remercie Melem pour tes indications qui m'ont été fortes utiles.