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


Метод IViewObjectEx::GetNaturalExtent (ocidl.h)

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

Синтаксис

HRESULT GetNaturalExtent(
  [in]  DWORD          dwAspect,
  [in]  LONG           lindex,
  [in]  DVTARGETDEVICE *ptd,
  [in]  HDC            hicTargetDev,
  [in]  DVEXTENTINFO   *pExtentInfo,
  [out] LPSIZEL        pSizel
);

Параметры

[in] dwAspect

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

Значение Значение
DVASPECT_CONTENT
Предоставьте представление элемента управления, чтобы его можно было отобразить в виде внедренного объекта внутри контейнера. Это значение обычно задается для объектов составных документов. Представление может использоваться для экрана или принтера.
DVASPECT_DOCPRINT
Предоставьте на экране представление элемента управления, как если бы он был напечатан на принтере с помощью команды Печать в меню Файл . Описываемые данные могут представлять последовательность страниц.
DVASPECT_ICON
Предоставьте знаковое представление элемента управления.
DVASPECT_THUMBNAIL
Предоставьте эскиз объекта, чтобы его можно было отобразить в средстве просмотра. Эскиз примерно 120 на 120 пикселей, 16-цветной (рекомендуемый) аппаратно-независимый растровый рисунок, потенциально заключенный в метафайл.

[in] lindex

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

[in] ptd

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

[in] hicTargetDev

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

[in] pExtentInfo

Указатель на структуру DVEXTENTINFO , указывающую размер данных.

[out] pSizel

Указатель на данные о размерах, возвращаемые объектом . Для возвращаемых данных о размерах задано значение -1 для любого измерения, которое не было изменено. Это значит, что если cx равно -1, то ширина не была скорректирована, если значение cy равно -1, то высота не была скорректирована. Если возвращается E_FAIL, указывающее, что размер не был изменен, то pSizel может иметь значение NULL.

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

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

Код возврата Описание
E_FAIL
Этот метод не реализован для указанного dwAspect или размер не был изменен.
E_NOTIMPL
Этот метод не был реализован.

Комментарии

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

Метод IViewObjectEx::GetNaturalExtent поддерживает как содержимое, так и целочисленный размер. При определении размера содержимого контейнер передает структуру DVEXTENTINFO объекту, в который объект возвращает предлагаемый размер. При определении целочисленного размера контейнер передает объекту в DVEXTENTINFO предпочтительный размер, и объект фактически корректирует свою высоту. Целочисленное изменение размера используется, когда пользователь использует резиновую полосу нового размера в режиме конструктора.

Автоподбор обычно происходит с такими объектами, как элемент управления Метка, который изменяет размер, если свойство autosize было включено и соответствующий текст был изменен. Автоподбор выполняется по-разному в зависимости от состояния объекта.

Если объект неактивен, происходит следующее:

  1. Объект вызывает IOleClientSite::RequestNewObjectLayout.
  2. Контейнер вызывает IOleObject::GetExtent и получает новые экстенты.
  3. Контейнер вызывает IOleObject::SetExtent и настраивает новые экстенты.
Если объект активен, происходит следующее:
  1. Объект вызывает IOleInPlaceSite::OnPosRectChange , чтобы указать, что ему требуется изменение размера.
  2. Контейнер вызывает IOleInPlaceObject::SetObjectRects и задает новый размер.

Требования

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

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

IOleClientSite::RequestNewObjectLayout

IOleInPlaceObject::SetObjectRects

IOleInPlaceSite::OnPosRectChange

IOleObject::GetExtent

IOleObject::SetExtent

IViewObjectEx