Метод 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 при успешном завершении. Другие возможные возвращаемые значения включают следующее.
Код возврата | Описание |
---|---|
|
Данные для получения отсутствуют. |
|
Операция рисования прервана. |
|
Ошибка при рисовании. |
|
Недопустимое значение для lindex; В настоящее время поддерживается только значение -1. |
|
Недопустимое значение для dwAspect. |
|
Недопустимый прямоугольник. |
Комментарии
Приложение-контейнер выполняет вызов 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 сообщению.
Экстент объекта зависит от аспекта рисования. Для непрямоугольных объектов экстент должен быть размером прямоугольника, охватывающего весь аспект. По соглашению источником объекта является левый верхний угол прямоугольника DVASPECT_CONTENT. Иными словами, источник всегда совпадает с верхним левым углом прямоугольника, поддерживаемого сайтом объекта, даже для непрямоугольного объекта.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | oleidl.h |