Поделиться через


Метод IOleInPlaceSiteWindowless::ScrollRect (ocidl.h)

Позволяет объекту прокручивать область в пределах своего активного встроенного изображения на экране.

Синтаксис

HRESULT ScrollRect(
  [in] INT     dx,
  [in] INT     dy,
  [in] LPCRECT pRectScroll,
  [in] LPCRECT pRectClip
);

Параметры

[in] dx

Величина прокрутки оси X.

[in] dy

Величина прокрутки оси Y.

[in] pRectScroll

Прямоугольник для прокрутки в клиентских координатах содержащего окна. Значение NULL указывает на полный объект.

[in] pRectClip

Прямоугольник для обрезки. Рисуются только пиксели, попадающие в прямоугольник. Не касается прокручиваемых пикселей. Если этот параметр имеет значение NULL, прямоугольник не обрезается.

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

Этот метод возвращает значение S_OK при успешном завершении.

Комментарии

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

Примечания для разработчиков

Контейнеры могут реализовать этот метод различными способами. Однако все они должны учитывать возможность того, что объект, запрашивающий прокрутку, может быть прозрачным или не иметь твердого фона. Контейнеры также должны учитывать, что могут существовать перекрывающиеся объекты.

Самый простой способ реализации этого метода заключается в простом перерисовке прямоугольника для прокрутки.

Дополнительным уточнением этой простой реализации является использование функции ScrollDC , если объект, запрашивающий прокрутку, непрозрачн, объект имеет твердый фон и нет перекрывающихся объектов.

Более сложные реализации могут использовать следующую процедуру:

  • Проверьте, является ли объект непрозрачным и имеет ли он сплошной фон, с помощью IViewObjectEx::GetViewStatus. В противном случае просто сделать прямоугольник недействительным для прокрутки. Дополнительное уточнение заключается в том, чтобы проверка, находится ли прокручиваемый прямоугольник полностью в непрозрачной области частично прозрачного объекта.
  • Получение контекста устройства окна.
  • Вырезайте непрозрачные части любого перекрывающегося объекта, возвращенного IViewObjectEx::GetRect.
  • Наконец, вызовите функцию ScrollDC .
  • Перерисуйте ранее недействительные прозрачные части любого перекрывающегося объекта.
Независимо от прямоугольника прокрутки и обрезки будут окрашены только пиксели, содержащиеся в прямоугольнике сайта объекта. Область, обнаруженная операцией прокрутки, становится недействительной и перерисовывается немедленно, прежде чем этот метод вернет.

Все операции перерисовки, созданные этим методом, должны выполняться синхронно перед возвратом этого метода.

Этот метод должен автоматически скрывать курсор во время операции прокрутки и перемещать курсор на величину прокрутки, если она находится внутри прямоугольника клипа.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header ocidl.h

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

IOleInPlaceSiteWindowless

IViewObjectEx::GetRect

IViewObjectEx::GetViewStatus