c#: 设置滚动条位置 (user32.dll)

3

我希望在 VC# 2008 中拥有两个(丰富的)文本框,并且这两个文本框可以同时滚动... 当我滚动 tb1 时,tb2 也会滚动到相同的位置。我使用以下函数:

[DllImport("user32.dll")]
static extern int SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw);

[DllImport("user32.dll")]
public static extern int GetScrollPos(IntPtr hwnd, int nBar);

这个很好用,但是...

int pos = GetScrollPos(tb1.Handle, 1);
SetScrollPos(tb2.Handle, 1, pos, true);

仅仅设置滚动条到相同的位置,但是不更新其中的文本内容。tb2.Update() 或者 Refresh 不起作用...

请帮忙解决,谢谢。

1个回答

3

我找到了答案。

[DllImport("user32.dll")]
static extern int SetScrollPos(IntPtr hWnd, int nBar,
                int nPos, bool bRedraw);

[DllImport("User32.Dll", EntryPoint = "PostMessageA")]
static extern bool PostMessage(IntPtr hWnd, uint msg, int wParam, int lParam);



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

谢谢你! 这是Stackoverflow上唯一一个处理适当的32位增量滚动的帖子(我之前使用的代码只有16位数据,而且使用了"WM_VSCROLL")。你有没有对以上内容的微小改变?我问这个是因为虽然它解决了我的问题,但我还要做更多工作来停止一些线条闪烁。顺便说一句,可以使用GetScrollPos来获取滚动位置: public int GetScroll() { return GetScrollPos((IntPtr)textBox1.Handle, (int)ScrollBarType.SbVert); } - Dan W

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接