2010-03-08 2 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); 

스크롤 위치를 이동하는 데 사용하는 외부 점인 점은 현재 위치를 얻고 정확하게 픽셀을 더하거나 빼는 것입니다. , 그리고 내 양식의 스크롤 막대가 원하는대로 완벽하게 움직이지만 컨트롤의 내용은 고정되어 있습니다. 여기에 어떤 문제가 있습니까?SetScrollPos : 스크롤 막대가 움직이지만 내용이 업데이트되지 않음

+2

완벽하게 작동하기 전에? 또한 두 번째'hWnd' 매개 변수가'IntPtr'가 아닌 이유는 무엇입니까? – SLaks

+1

Winforms 응용 프로그램과 상호 작용할 경우 P/Invoke를 사용할 필요가 없습니다. 컨트롤에서 제공하는 .NET API를 사용하여 필요한 모든 작업을 수행 할 수 있어야합니다. 애플리케이션에 대해 좀 더 자세히 설명해 주시겠습니까? –

+1

그것은 사용자 정의 빌드 UserControl이야, 내가 원하는 정밀도로 스크롤을 제어 할 수있는 방법이있다 – caesay

답변

0

올바른 API 호출을 발견했습니다! :)

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

난 그냥 SetScrollPos를 사용했지만, PostMessageA과 결합이 사용자가 스크롤 무엇 제어

+0

당신은 WM_VSCROLL에 대한 계약을 위반하고있다, 그것은 SB_ENDSCROLL 없이는 결코 보내지지 않는다. AutoScrollPosition 속성을 사용하여 스크롤 막대 위치를 제어합니다. –

+3

@nobugs : 내 문제를 해결할 수있는 방법을 구체적으로 설명하고 싶습니까? 아니면 자신의 답변을 올리시겠습니까? – caesay