Программная прокрутка текстовых полей с использованием сообщений WndProc - PullRequest
1 голос
/ 04 апреля 2010

Я пытаюсь прокрутить текстовое поле, используя метод WndProc формы. Код, который я создал до сих пор, после поиска в Интернете, выглядит следующим образом:

private void ScrollTextBox()
{
    scrollMessage = Message.Create(TabContents.Handle, 0x00B6, new IntPtr(0x0003), new IntPtr(0x0000));
    this.WndProc(ref scrollMessage);
}

где TabContents - это текстовое поле.

По какой-то причине ничего не происходит, когда я вызываю этот метод. Я хотел бы знать почему. Я понимаю, что могу добиться того же с помощью метода MoveToCaret, но мне любопытно, почему это не работает.

EDIT: Как и в опубликованном ответе от Бинера, я написал другой метод, используя SendMessage:

        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp); 

        private void ScrollTextBox2(int lines)
        {
            SendMessage(TabContents.Handle, 0x00B6, new IntPtr(0), new IntPtr(lines));
        }

Кажется, это работает% 100. Мне все еще интересно, почему this.WndProc (ref message) не работает, учитывая сообщение, созданное с тем же набором параметров.

1 Ответ

2 голосов
/ 04 апреля 2010

Это может быть возможно, но я никогда не пробовал так. Я использовал SendMessage для отправки сообщения Windows непосредственно в текстовое поле, чтобы вызвать прокрутку.

private const int WM_VSCROLL = 0x115;
private const int SB_BOTTOM = 7;

[DllImport("user32.dll", CharSet=CharSet.Auto)]
private static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam,
IntPtr lParam);

// Scroll to the bottom, but don't move the caret position.
SendMessage(TabContents.Handle, WM_VSCROLL, (IntPtr) SB_BOTTOM, IntPtr.Zero);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...