Я успешно контролировал вертикальную полосу прокрутки в 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;
}
Используйте правильные символы здесь, это WM_VSCROLL вместо 0x115, SB_VERT вместо 0x1. Затем вы не можете помочь себе попасть в яму успеха с помощью WM_HSCROLL и SB_HORZ. Вместо этого используйте SendMessage(). –
Как SendMessage() лучше, чем PostMessage? –
Он всегда отправляется, любая программа, которую вы взламываете, может не ожидать GetMessage(), чтобы вернуть это сообщение и, следовательно, не обрабатывать его должным образом. –