Метод IViewObjectEx::QueryHitPoint (ocidl.h)
Указывает, находится ли точка в пределах заданного аспекта объекта.
Синтаксис
HRESULT QueryHitPoint(
[in] DWORD dwAspect,
[in] LPCRECT pRectBounds,
[in] POINT ptlLoc,
[in] LONG lCloseHint,
[out] DWORD *pHitResult
);
Параметры
[in] dwAspect
Запрошенный аспект рисования.
[in] pRectBounds
Объект, ограничивающий прямоугольник в клиентских координатах содержащего окна. Этот прямоугольник вычисляется и передается контейнером, чтобы объект смог интерпретировать расположение попадания.
[in] ptlLoc
Расположение попадания в клиентских координатах содержащего окна.
[in] lCloseHint
Предлагаемое расстояние в единицах HIMETRIC , которое контейнер считает близким. Это значение является подсказкой, и объекты могут интерпретировать его по-своему. Объекты также могут использовать это указание для приблизительного вывода разрешения выходных данных, чтобы выбрать расширяемость реализации теста попадания.
[out] pHitResult
Указатель на возвращаемые сведения о попадании, выраженные в виде значений перечисления HITRESULT .
Возвращаемое значение
Этот метод возвращает S_OK об успешном выполнении. Другие возможные возвращаемые значения включают следующее.
Код возврата | Описание |
---|---|
|
Этот метод не реализован для запрошенного аспекта. Вместо этого используйте DVASPECT_CONTENT . |
Комментарии
Для поддержки обнаружения попаданий в непрямоугольных объектах контейнеру требуется надежный способ запроса объекта, находится ли данное расположение внутри одного из его аспектов рисования. Эта функция предоставляется IViewObjectEx::QueryHitPoint.
Возможные возвращаемые значения:
- Снаружи, в прозрачной области
- Достаточно близко, чтобы считаться попаданием (может использоваться небольшими или тонкими объектами)
- Ударил
IViewObjectEx::QueryHitPoint можно вызывать для любого из аспектов рисования, поддерживаемых объектом . Он должен завершиться ошибкой, если не поддерживается для запрошенного аспекта рисования.
Прозрачные объекты могут захотеть реализовать сложный механизм обнаружения попаданий, при котором пользователь может выбрать либо прозрачный объект, либо объект за ним, в зависимости от того, где именно происходит щелчок внутри объекта. Например, прозрачное текстовое поле с достаточно большим текстом может позволить пользователю выбрать объект позади, например растровое изображение, когда пользователь щелкает между символами. По этой причине сведения, возвращаемые IViewObjectEx::QueryHitPoint , содержат сведения о том, происходит ли попадание в непрозрачную или прозрачную область.
Примером непрямоугольного и прозрачного обнаружения попадания является элемент управления "Прозрачный круг" с объектом за ним (строка в примере ниже):
Отображаемые значения предназначены для проверки попадания в круг; серые области не являются частью элемента управления, но показаны здесь, чтобы указать, что область вокруг изображения считается близкой. Каждый объект реализует собственное определение close, но ему помогает подсказка, предоставляемая контейнером, чтобы можно было настроить близость по мере увеличения или уменьшения масштаба изображений.
На рисунке выше точки, отмеченные как Hit, Close и Transparent, будут попаданиями различной силы на круге, за исключением пометки Transparent (но для линии close). Это иллюстрирует влияние разной силы попаданий. Так как круг реагирует прозрачным, пока линия утверждает, что она закрывается, а прозрачная линия слабее, чем близко, линия принимает удар.
Примечания для разработчиков
Объект, поддерживающий IViewObjectEx , необходим для реализации этого метода по крайней мере для DVASPECT_CONTENT аспекта. Объект не должен предпринимать никаких других действий в ответ на этот метод, кроме как возврат сведений; не должно быть побочных эффектов.Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | ocidl.h |