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

控制内容,所以这些都是实习医生即时通讯使用移动滚动条的位置,什么IM做的,是我得到的当前位置,并添加或。减去像素的确切数额,我的表单上的滚动条完全按照我的要求移动,但控件中的内容保持不动。这里有什么问题?SetScrollPos:滚动条移动,但没有更新

+2

你滚动控制什么?另外,为什么第二个'hWnd'参数不是'IntPtr'? – SLaks 2010-03-08 14:52:54

+1

如果您正在与Winforms应用程序进行交互,那么应该不需要使用P/Invoke - 您应该能够使用控件提供的.NET API完成您需要的一切。你能否详细介绍一下你的应用程序? – 2010-03-08 15:00:17

+1

这是一个自定义的UserControl,它没有方法可以控制滚动到我需要的精度 – caesay 2010-03-08 16:28:28

回答

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属性来控制滚动条的位置。 – 2010-03-09 22:33:42

+3

@nobugs:你想详细说明我可以如何解决我的问题,或张贴你自己的答案吗? – caesay 2010-03-10 02:02:47