2010-03-08 3 views
0
[DllImport("user32.dll")] 
public static extern int SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw); 
[DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)] 
public static extern int GetScrollPos(int hWnd, int nBar); 

Ce sont donc les externs im en utilisant pour déplacer la position de défilement, ce qui im ​​faire, est-je obtenir la position actuelle, et ajouter ou soustrais un montant exact de pixels , et la barre de défilement sur mon formulaire se déplace parfaitement comment je le veux, mais le contenu dans le contrôle reste stationnaire. Quel est le problème ici?SetScrollPos: barre de défilement en mouvement, mais le contenu de contrôle ne mise à jour

+2

Quel contrôle vous faites défiler? De plus, pourquoi le second paramètre 'hWnd' n'est-il pas un' IntPtr'? – SLaks

+1

Si vous interagissez avec une application Winforms, il ne devrait pas être nécessaire d'utiliser P/Invoke - vous devriez être capable de faire tout ce dont vous avez besoin en utilisant l'API .NET fournie par les contrôles. Pourriez-vous donner un peu plus de détails sur votre demande? –

+1

c'est un UserControl personnalisé, il n'y a pas de méthodes qui peuvent contrôler le défilement à la précision dont j'ai besoin – caesay

Répondre

0

J'ai trouvé l'appel d'API correct! :)

public void ScrollTo(int Position) 
    { 
     SetScrollPos((IntPtr)this.Handle, 0x1, Position, true); 
     PostMessageA((IntPtr)this.Handle, 0x115, 4 + 0x10000 * Position, 0); 
    } 

avant que je ne faisais que SetScrollPos utilise, mais cela combiné avec PostMessageA fonctionne parfaitement

+0

Vous rompez le contrat pour WM_VSCROLL, il n'est jamais envoyé sans SB_ENDSCROLL. Utilisez la propriété AutoScrollPosition pour contrôler la position de la barre de défilement. –

+3

@nobugs: voulez-vous élaborer sur la façon dont je peux résoudre mon problème, ou postez votre propre réponse? – caesay

Questions connexes