Метод 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 .
[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 при успешном завершении. Другие возможные возвращаемые значения включают следующее.
Код возврата | Описание |
---|---|
|
Этот метод не реализован для указанного dwAspect или размер не был изменен. |
|
Этот метод не был реализован. |
Комментарии
Существует два общих подхода к размеру элемента управления. Первый подход возлагает на контроль ответственность за определение размера; Второй подход дает контейнеру ответственность за изменение размера элемента управления. Первый подход называется автоподбором. Во втором подходе используются два варианта: изменение размера содержимого и целочисленное изменение размера.
Метод IViewObjectEx::GetNaturalExtent поддерживает как содержимое, так и целочисленный размер. При определении размера содержимого контейнер передает структуру DVEXTENTINFO объекту, в который объект возвращает предлагаемый размер. При определении целочисленного размера контейнер передает объекту в DVEXTENTINFO предпочтительный размер, и объект фактически корректирует свою высоту. Целочисленное изменение размера используется, когда пользователь использует резиновую полосу нового размера в режиме конструктора.
Автоподбор обычно происходит с такими объектами, как элемент управления Метка, который изменяет размер, если свойство autosize было включено и соответствующий текст был изменен. Автоподбор выполняется по-разному в зависимости от состояния объекта.
Если объект неактивен, происходит следующее:
- Объект вызывает IOleClientSite::RequestNewObjectLayout.
- Контейнер вызывает IOleObject::GetExtent и получает новые экстенты.
- Контейнер вызывает IOleObject::SetExtent и настраивает новые экстенты.
- Объект вызывает IOleInPlaceSite::OnPosRectChange , чтобы указать, что ему требуется изменение размера.
- Контейнер вызывает IOleInPlaceObject::SetObjectRects и задает новый размер.
Требования
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | ocidl.h |
См. также раздел
IOleClientSite::RequestNewObjectLayout
IOleInPlaceObject::SetObjectRects