Функция ScrollWindowEx (winuser.h)

Функция ScrollWindowEx прокручивает содержимое клиентской области указанного окна.

Синтаксис

int ScrollWindowEx(
  [in]  HWND       hWnd,
  [in]  int        dx,
  [in]  int        dy,
  [in]  const RECT *prcScroll,
  [in]  const RECT *prcClip,
  [in]  HRGN       hrgnUpdate,
  [out] LPRECT     prcUpdate,
  [in]  UINT       flags
);

Параметры

[in] hWnd

Тип: HWND

Выполните обработку до окна, в котором должна прокручиваться клиентская область.

[in] dx

Тип: int

Указывает объем горизонтальной прокрутки (в единицах устройства). Этот параметр должен быть отрицательным значением для прокрутки влево.

[in] dy

Тип: int

Указывает объем вертикальной прокрутки (в единицах устройства). Этот параметр должен быть отрицательным значением для прокрутки вверх.

[in] prcScroll

Тип: const RECT*

Указатель на структуру RECT , задающую прокручиваемую часть клиентской области. Если этот параметр имеет значение NULL, прокручивается вся клиентская область.

[in] prcClip

Тип: const RECT*

Указатель на структуру RECT , содержащую координаты прямоугольника обрезки. Затрагиваются только биты устройства в прямоугольнике обрезки. Биты, прокрученные от внешней стороны прямоугольника к внутренней части, окрашены; Биты, прокрученные из внутренней части прямоугольника на снаружи, не окрашены. Этот параметр может иметь значение NULL.

[in] hrgnUpdate

Тип: HRGN

Дескриптор области, которая была изменена для удержания области, которая была признана недействительной при прокрутке. Этот параметр может иметь значение NULL.

[out] prcUpdate

Тип: LPRECT

Указатель на структуру RECT , получающую границы прямоугольника, который был признан недействительным при прокрутке. Этот параметр может иметь значение NULL.

[in] flags

Тип: UINT

Указывает флаги, управляющие прокруткой. Этот параметр может быть сочетанием следующих значений.

Значение Значение
SW_ERASE
Удаляет только что недействимую область, отправляя WM_ERASEBKGND сообщение в окно при указании флага SW_INVALIDATE.
SW_INVALIDATE
Делает недействительной область, определяемую параметром hrgnUpdate после прокрутки.
SW_SCROLLCHILDREN
Прокручивает все дочерние окна, пересекающиеся с прямоугольником, на который указывает параметр prcScroll . Дочерние окна прокручиваются по количеству пикселей, заданному параметрами dx и dy . Система отправляет сообщение WM_MOVE всем дочерним окнам, пересекающим прямоугольник prcScroll , даже если они не перемещаются.
SW_SMOOTHSCROLL
Прокрутка с использованием плавной прокрутки. Используйте часть HIWORD параметра flags , чтобы указать, сколько времени (в миллисекундах) должна занять операция плавной прокрутки.

Возвращаемое значение

Тип: int

Если функция выполнена успешно, возвращается значение SIMPLEREGION (прямоугольная недопустимая область), COMPLEXREGION (нерекомендоцированная область; перекрывающиеся прямоугольники) или NULLREGION (недействительная область недействительна).

Если функция завершается сбоем, возвращается значение ERROR. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Комментарии

Если флаги SW_INVALIDATE и SW_ERASE не указаны, ScrollWindowEx не делает недействительной область, из которую выполняется прокрутка. Если установлен любой из этих флагов, ScrollWindowEx делает эту область недействительной. Область не обновляется, пока приложение не вызовет функцию UpdateWindow , не вызовет функцию RedrawWindow (указав флаг RDW_UPDATENOW или RDW_ERASENOW) или не извлекает сообщение WM_PAINT из очереди приложения.

Если окно имеет стиль WS_CLIPCHILDREN , возвращаемые области, заданные hrgnUpdate и prcUpdate , представляют общую площадь прокручиваемого окна, которое необходимо обновить, включая все области дочерних окон, которые необходимо обновить.

Если указан флаг SW_SCROLLCHILDREN, система неправильно обновляет экран при прокрутке части дочернего окна. Часть прокручиваемого дочернего окна, расположенная за пределами исходного прямоугольника, не удаляется и неправильно перерисована в новом назначении. Чтобы переместить дочерние окна, которые не полностью находятся в прямоугольнике, заданном prcScroll, используйте функцию DeferWindowPos . Курсор перемещается, если установлен флаг SW_SCROLLCHILDREN, а прямоугольник с курсором пересекается с прямоугольником прокрутки.

Все входные и выходные координаты (для prcScroll, prclip, prcUpdate и hrgnUpdate) определяются как клиентские координаты, независимо от того, имеет ли окно стиль CS_OWNDC или CS_CLASSDC класса. При необходимости используйте функции LPtoDP и DPtoLP для преобразования в логические координаты и из нее.

Примеры

Пример см. в разделе Прокрутка текста с помощью сообщения WM_PAINT.

Требования

   
Минимальная версия клиента Windows Vista [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header winuser.h (включая Windows.h)
Библиотека User32.lib
DLL User32.dll
Набор API ext-ms-win-ntuser-misc-l1-2-0 (представлено в Windows 8.1)

См. также раздел

DPtoLP

DeferWindowPos

LPtoDP

Другие ресурсы

RECT

RedrawWindow

UpdateWindow