2010-05-16 4 views
3

J'ai une fenêtre avec son propre défilement H et V. Je traiter l'événement comme celui-ci:Barre de défilement recule après WM_VSCROLL

case WM_VSCROLL: 

     SetScrollPos(hWnd, SB_VERT, (int)HIWORD(wParam), TRUE); 

     break; 

tout ce que je veux est la position de la barre de défilement pour rester une fois que je libère ma souris, mais ce qu'il fait est juste de revenir au sommet après. Qu'est-ce que je fais mal?

Merci

Répondre

10

Le paramètre wParam du message WM_VSCROLL est soit SB_TOP, SB_BOTTOM, SB_PAGEUP, SB_PAGEDOWN, SB_LINEUP, SB_LINEDOWN, SB_THUMBPOSITION ou SB_THUMBTRACK, où les noms doivent s'expliquer.

  • SB_TOP et SB_BOTTOM signifie que la fenêtre de défilement est d'aller en haut ou en bas, respectivement. Ces messages peuvent être envoyés en cliquant avec le bouton droit sur une barre de défilement verticale et en sélectionnant "Haut" et "Bas". (Regardez dans le bloc-notes de Windows, Win XP +, par exemple.)

  • SB_PAGEUP et SB_PAGEDOWN signifie une page (écran) vers le haut ou vers le bas. Ceux-ci sont envoyés si vous cliquez quelque part sur la barre de défilement à côté du pouce ou sur les flèches haut ou bas, ou si vous utilisez le menu contextuel de la barre de défilement.

  • SB_LINEUP et SB_LINEDOWN sont envoyés lorsque l'utilisateur clique sur les boutons haut et bas de la barre de défilement ou sélectionne les commandes appropriées du menu contextuel.

  • SB_THUMBTRACK est envoyé en continu lorsque l'utilisateur fait défiler en faisant glisser le pouce de la barre de défilement.

  • SB_THUMBPOSITION est envoyé lorsque l'utilisateur a libéré le pouce.

Voir l'article MSDN WM_VSCROLL pour plus d'informations. Ainsi, lorsque vous recevez un message WM_VSCROLL, vous devez d'abord effectuer le défilement lui-même. Si, par exemple, vous écrivez un éditeur de texte, vous devez redessiner le texte, mais avec une ligne différente en haut de la fenêtre. Ensuite, vous devez mettre à jour la barre de défilement à sa nouvelle position, de préférence au moyen de SetScrollInfo, mais vous pouvez également utiliser l'ancienne fonction SetScrollPos.

+0

Merci, je suis encore un peu nouveau à WinAPI – jmasterx

+2

Voir http://msdn.microsoft.com/en-us/library/bb787531(VS.85).aspx pour un exemple de la façon de gérer le message 'WM_VSCROLL'. –

0

Dans la section Case, le système traite un message WM_VSCROLL. Il va exécuter la procédure de fenêtre par défaut après votre SetScrollPos. Dans la procédure de fenêtre par défaut, le système définira lui-même la position du curseur de la barre de défilement. Donc, bien que SetScrollPos prenne des effets, le système change la position du pouce après cela. Je pense que vous devriez faire votre SetScrollPos après avoir appelé la procédure de fenêtre par défaut, c'est-à-dire, peut-être après avoir renvoyé cette fonction, et vous pouvez alors SetScrollPos.