2010-03-08 33 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