2014-03-31 1 views
0

Я успешно контролировал вертикальную полосу прокрутки в RichTextBox благодаря более раннему сообщению здесь: https://stackoverflow.com/a/5611856/848344. Но как мне управлять горизонтальной полосой прокрутки?Установите горизонтальную полосу прокрутки для 32-битной прокрутки в C# RichTextBox

Метод заполняется для setVerticalScroll(). Мне просто нужно заполнить его для setHorizontalScroll(), где говорится: «Вставьте 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); 
} 

Если кто-то может проверить, что, хотя я был бы благодарен.

Смежные вопросы