Метод IViewObject::D raw (oleidl.h)

Рисует представление объекта в указанном контексте устройства.

Синтаксис

HRESULT Draw(
  [in] DWORD                          dwDrawAspect,
  [in] LONG                           lindex,
  [in] void                           *pvAspect,
  [in] DVTARGETDEVICE                 *ptd,
  [in] HDC                            hdcTargetDev,
  [in] HDC                            hdcDraw,
  [in] LPCRECTL                       lprcBounds,
  [in] LPCRECTL                       lprcWBounds,
  [in] BOOL(* )(ULONG_PTR dwContinue) pfnContinue,
  [in] ULONG_PTR                      dwContinue
);

Параметры

[in] dwDrawAspect

Указывает пропорции для рисования (то есть, как должен быть представлен объект). Представления включают содержимое, значок, эскиз или печатный документ. Допустимые значения берутся из перечислений DVASPECT и DVASPECT2. Обратите внимание, что новые объекты и контейнеры, поддерживающие оптимизированные интерфейсы рисования, поддерживают значения перечисления DVASPECT2 . Старые объекты и контейнеры, которые не поддерживают оптимизированные интерфейсы рисования, могут не поддерживать DVASPECT2. Объекты без окон допускают только DVASPECT_CONTENT, DVASPECT_OPAQUE и DVASPECT_TRANSPARENT.

[in] lindex

Часть объекта, требуемая для операции рисования. Его интерпретация зависит от значения в параметре dwAspect. Дополнительные сведения см. в перечислении DVASPECT .

[in] pvAspect

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

[in] ptd

Указатель на структуру DVTARGETDEVICE , которая описывает устройство, для которого объект должен быть отрисован. Если значение РАВНО NULL, представление должно быть отрисовывается для целевого устройства по умолчанию (обычно это дисплей). Значение, отличное от NULL , интерпретируется в сочетании с hdcTargetDev и hdcDraw. Например, если hdcDraw указывает принтер в качестве контекста устройства, параметр ptd указывает на структуру, описывающую это устройство принтера. Данные могут быть напечатаны, если hdcTargetDev является допустимым значением, или они могут отображаться в режиме предварительного просмотра, если hdcTargetDev имеет значение NULL.

[in] hdcTargetDev

Контекст сведений для целевого устройства, указанный параметром ptd, из которого объект может извлекать метрики устройства и тестировать возможности устройства. Если ptd имеет значение NULL; объект должен игнорировать значение в параметре hdcTargetDev .

[in] hdcDraw

Контекст устройства в котором требуется выполнить рисование. Для объекта без окна параметр hdcDraw должен находиться в режиме MM_TEXT сопоставления с логическими координатами, соответствующими клиентским координатам содержащего окна. Для объекта без окон контекст устройства должен находиться в том же состоянии, что и обычно передаваемый WM_PAINT сообщению.

[in] lprcBounds

Указатель на структуру RECTL, указывающую прямоугольник в hdcDraw и в котором должен быть нарисован объект. Этот параметр управляет размещением и растягиванием объекта. Этот параметр должен иметь значение NULL для рисования активного объекта без окна на месте. В любой другой ситуации ЗНАЧЕНИЕ NULL не является юридическим значением и должно привести к E_INVALIDARG коду ошибки. Если контейнер передает значение, отличное от NULL , объекту без окон необходимо преобразовать запрошенный аспект в указанный контекст устройства и прямоугольник. Контейнер может запросить его от объекта без окна для отрисовки второго, неактивного представления объекта или для печати объекта.

[in] lprcWBounds

Если hdcDraw является контекстом устройства метафайла, указатель на структуру RECTL, указывающую ограничивающий прямоугольник в базовом метафайле. Структура прямоугольника содержит экстент окна и источник окна. Эти значения полезны для рисования метафайлов. Прямоугольник, обозначенный lprcBounds , вложен в этот прямоугольник lprcWBounds ; они находятся в одном пространстве координат.

Если hdcDraw не является контекстом метафайла устройства; lprcWBounds будет иметь значение NULL.

[in] pfnContinue

Указатель на функцию обратного вызова, которую объект просмотра должен периодически вызывать во время продолжительной операции рисования, чтобы определить, должна ли операция продолжаться или ее следует отменить. Эта функция возвращает значение TRUE , чтобы продолжить рисование. Он возвращает значение FALSE , чтобы остановить рисование, и в этом случае IViewObject::D raw возвращает DRAW_E_ABORT.

DwContinue

[in] dwContinue

Значение, передаваемое в качестве параметра функции, на которую указывает параметр pfnContinue . Как правило, dwContinue — это указатель на определяемую приложением структуру, необходимую внутри функции обратного вызова.

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

Этот метод возвращает значение S_OK при успешном завершении. Другие возможные возвращаемые значения включают следующее.

Код возврата Описание
OLE_E_BLANK
Данные для получения отсутствуют.
DRAW_E_ABORT
Операция рисования прервана.
VIEW_E_DRAW
Ошибка при рисовании.
DV_E_LINDEX
Недопустимое значение для lindex; В настоящее время поддерживается только значение -1.
DV_E_DVASPECT
Недопустимое значение для dwAspect.
OLE_E_INVALIDRECT
Недопустимый прямоугольник.

Комментарии

Приложение-контейнер выполняет вызов IViewObject::D raw для создания представления автономного объекта. Этот метод рисует указанную часть (lindex) указанного представления (dwAspect и pvAspect) в указанном контексте устройства (hdcDraw). Форматирование, шрифты и другие решения по отрисовке принимаются на основе целевого устройства, заданного параметром ptd.

Существует связь между значением dwDrawAspect и значением lprcbounds . Значение lprcbounds указывает прямоугольник в hdcDraw , с которым будет сопоставлен документ. Для DVASPECT_THUMBNAIL, DVASPECT_ICON и DVASPECT_SMALLICON объект рисует все, что он хочет нарисовать, и сопоставляет его с заданным пространством наилучшим образом. Некоторые объекты могут масштабироваться по размеру, в то время как другие могут масштабироваться по размеру, но сохранить пропорции. Кроме того, некоторые могут масштабироваться таким образом, что рисунок отображается на полную ширину, но нижняя часть обрезается. Контейнер может предложить размер с помощью IOleObject::SetExtent, но он не контролирует размер отрисовки. В случае DVASPECT_CONTENT реализация IViewObject::D raw должна использовать экстенты, заданные IOleObject::SetExtent , или ограничивающий прямоугольник, заданный в параметре lprcBounds .

Для новых объектов, поддерживающих оптимизированные методы рисования, и для объектов без окон этот метод следует использовать следующим образом:

  • В dwAspect поддерживаются новые аспекты рисования, как определено в DVASPECT2.
  • Параметр pvAspect можно использовать для передачи дополнительных сведений, позволяющих оптимизировать рисование через структуру DVASPECTINFO .
  • Метод IViewObject::D raw можно вызвать для перерисовки активного объекта без окна на месте, задав для параметра lrpcBoundsзначение NULL. В любой другой ситуации ЗНАЧЕНИЕ NULL является недопустимым и должно привести к E_INVALIDARG коду ошибки. Объект без окна использует прямоугольник, переданный командой активации, или вызывает IOleInPlaceObject::SetObjectRects вместо этого параметра. Если контейнер передает значение, отличное от NULL , объекту без окон необходимо преобразовать запрошенный аспект в указанный контекст устройства и прямоугольник. Контейнер может запросить его от объекта без окна для отрисовки второго, неактивного представления объекта или для печати объекта. Дополнительные сведения о рисовании объектов без окон см. в интерфейсе IOleInPlaceSiteWindowless .
  • Для объектов без окон параметр dwAspect допускает только аспекты DVASPECT_CONTENT, DVASPECT_OPAQUE и DVASPECT_TRANSPARENT.
  • Для объекта без окон параметр hdcDraw должен находиться в режиме MM_TEXT сопоставления с логическими координатами, соответствующими клиентским координатам содержащего окна. Для объекта без окон контекст устройства должен находиться в том же состоянии, что и обычно передаваемый WM_PAINT сообщению.
Для обеспечения совместимости со старыми объектами и контейнерами, которые не поддерживают оптимизацию рисования, все объекты, прямоугольные или нет, должны поддерживать источник и прямоугольный экстент. Это позволяет контейнеру по-прежнему рассматривать все внедренные объекты как прямоугольники и передавать им соответствующие прямоугольники отрисовки в draw.

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

Требования

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

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

DVASPECT

DVASPECT2

DVASPECTINFO

IOleInPlaceSiteWindowless

IViewObject

OleDraw