2014-03-31 83 views
0

我已成功控制RichTextBox中的垂直滚动条,这要感谢以前的帖子:https://stackoverflow.com/a/5611856/848344。但是,我如何控制水平滚动条?在C#RichTextBox中为32位滚动设置水平滚动条

该方法填充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; 
} 
+0

这里使用正确的符号,它是WM_VSCROLL而不是0x115,SB_VERT而不是0x1。然后,你不能用WM_HSCROLL和SB_HORZ帮助自己落在成功的坑里。使用SendMessage()代替。 –

+0

SendMessage()如何比PostMessage更好? –

+0

它总是被发送,无论你正在黑客攻击的程序可能不希望GetMessage()返回该消息,因此无法正确处理它。 –

回答

0

通过尝试和错误以及纯粹的运气,我想我找到了解决方案。我只是减一从0x115值,使量0x114(也改变为0x1为0x0):

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

如果有人可以检查,虽然,我会很感激。