2012-02-01 2 views
-1

Мне нужно иметь возможность программно прокручивать окно вверх и вниз, учитывая только точку на экране. Мне удалось получить дескриптор с использованием Windows API, но я не могу заставить его прокручивать вверх или вниз.Указание отдельного окна на прокрутку

Пусть следующий код:

//retrieves the correct window. 
IntPtr  hWnd = Win32.WindowFromPoint(new Point(xPos, yPos)); 

Win32.Rect rect = default(Win32.Rect); 

//retrieves a rectangle with the desired windows dimensions 
Win32.GetWindowRect(hWnd, ref rect); 

//Insert scroll code here... 

ответ

1

Вы использовали функцию SendMessage() с WM_VSCROLL и WM_HSCROLL сообщениями?

Также проверьте SetScrollInfo (pInvoked version here). Даже сообщение this может быть вам полезна.

+1

Посоветуйте SetScrollInfo; это то, что элементы управления используют внутри, чтобы обновить позицию полосы прокрутки, но это не повлияет на внутреннее состояние элемента управления, и вместо этого вы получите невидимую полосу прокрутки с визуальными эффектами. WM_H/VSCROLL - ваш лучший выбор. – BrendanMcK

+0

Сообщение, которое вы предоставили, действительно предоставило правильное решение. – Martin

4

для прокрутки окна необходимо отправить ему сообщение окна, вызвав SendMessage с соответствующими параметрами - для получения полной информации относительно прокрутки и связанных с ними сообщений и т.д. см MSDN.

UPDATE - в соответствии с комментариями:

Другим вариантом может быть назвать ScrollWindowEx на hWnd - согласно комментариям, призывающих ScrollwindowEx НЕ следует использовать, поскольку это создало бы несоответствие между отображаемым государством и внутреннее состояние соответствующее окно!

+1

Определенно не хотите использовать ScrollWindowEx; который может перемещать биты вокруг экрана, но основной элемент управления будет продолжать действовать так, как будто он все еще находится в старой позиции (так как его внутреннее состояние не изменилось), что вызывает много путаницы для пользователя! – BrendanMcK

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