在C#RichTextBox中设置水平滚动条以进行32位滚动

时间:2014-03-31 04:22:17

标签: c# winapi scrollbar richtextbox

我已经成功控制了RichTextBox中的垂直滚动条,这要归功于之前的帖子:https://stackoverflow.com/a/5611856/848344。但是如何控制水平滚动条?

为setVerticalScroll()填写该方法。我只需要在setHorizo​​ntalScroll()中填写“插入gubbins这里。”。

// 32 bit scrolling of pane slider
// https://stackoverflow.com/questions/1380104/cc-setscrollpos-user32-dll
[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);
[DllImport("User32.dll")]
private extern static int GetScrollPos(IntPtr hWnd, int nBar);
private enum ScrollBarType : uint { SbHorz = 0, SbVert = 1, SbCtl = 2, SbBoth = 3 }

public void setVerticalScroll(IntPtr hWnd, int pos) {
    SetScrollPos(hWnd, 0x1, pos, true);
    PostMessage(hWnd, 0x115, 4 + 0x10000 * pos, 0);
}
public void setHorizontalScroll(IntPtr hWnd, int pos) {
    /////////////////////////////////////
    //////////////// Insert gubbins here.
    /////////////////////////////////////
}
public int getVerticalScroll(IntPtr hWnd) {
    int n = GetScrollPos(hWnd, (int)ScrollBarType.SbVert);
    return n;
}
public int getHorizontalScroll(IntPtr hWnd) {
    int n = GetScrollPos(hWnd, (int)ScrollBarType.SbHorz);
    return n;
}

1 个答案:

答案 0 :(得分:0)

通过反复试验和纯粹的运气,我想我找到了解决方案。我只是从0x115值减去一个来制作0x114(并且还将0x1改为0x0):

public void setHorizontalScroll(IntPtr hWnd, int pos)
{
    SetScrollPos(hWnd, 0x0, pos, true);
    PostMessage(hWnd, 0x114, 4 + 0x10000 * pos, 0);
}

如果有人可以查看,我会感激不尽。