Método IViewObjectEx::QueryHitPoint (ocidl.h)
Indica si un punto está dentro de un aspecto determinado de un objeto.
Sintaxis
HRESULT QueryHitPoint(
[in] DWORD dwAspect,
[in] LPCRECT pRectBounds,
[in] POINT ptlLoc,
[in] LONG lCloseHint,
[out] DWORD *pHitResult
);
Parámetros
[in] dwAspect
Aspecto de dibujo solicitado.
[in] pRectBounds
Rectángulo delimitador de objetos en coordenadas de cliente de la ventana contenedora. El contenedor calcula y pasa este rectángulo para que el objeto pueda interpretar significativamente la ubicación de acierto.
[in] ptlLoc
Ubicación de aciertos en las coordenadas de cliente de la ventana contenedora.
[in] lCloseHint
Distancia sugerida en unidades HIMETRIC que el contenedor considera cerrar. Este valor es una sugerencia y los objetos pueden interpretarlo de forma propia. Los objetos también pueden usar esta sugerencia para deducir aproximadamente la resolución de salida para elegir la amplitud de la implementación de la prueba de posicionamiento.
[out] pHitResult
Puntero a la información devuelta sobre el acierto expresado como los valores de enumeración HITRESULT .
Valor devuelto
Este método devuelve S_OK si se ejecuta correctamente. Otros posibles valores devueltos son los siguientes.
Código devuelto | Descripción |
---|---|
|
Este método no se implementa para el aspecto solicitado. Use DVASPECT_CONTENT en su lugar. |
Comentarios
Para admitir la detección de aciertos en objetos no rectangulares, el contenedor necesita una manera confiable de preguntar a un objeto si una ubicación determinada está dentro de uno de sus aspectos de dibujo. IViewObjectEx::QueryHitPoint proporciona esta función.
Entre los valores devueltos posibles se incluyen:
- Fuera, en una región transparente
- Lo suficientemente cerca como para considerarse un acierto (puede ser utilizado por objetos pequeños o finos)
- Golpe
Se puede llamar a IViewObjectEx::QueryHitPoint para cualquiera de los aspectos de dibujo que admite un objeto. Debe producir un error si no se admite para el aspecto de dibujo solicitado.
Es posible que los objetos transparentes deseen implementar un mecanismo de detección de posicionamiento complejo en el que el usuario pueda seleccionar el objeto transparente o un objeto detrás de él, dependiendo de dónde se produzca exactamente el clic dentro del objeto. Por ejemplo, un cuadro de texto transparente que muestra texto lo suficientemente grande puede permitir al usuario seleccionar el objeto detrás, por ejemplo, un mapa de bits, cuando el usuario hace clic entre los caracteres. Por este motivo, la información devuelta por IViewObjectEx::QueryHitPoint incluye una indicación de si el acierto se produce en una región opaca o transparente.
Un ejemplo de detección de aciertos no rectangular y transparente es un control de círculo transparente con un objeto detrás de él (una línea en el ejemplo siguiente):
Los valores que se muestran son para las pruebas de posicionamiento en el círculo; Las regiones grises no forman parte del control, pero se muestran aquí para indicar un área alrededor de la imagen que se considera cercana. Cada objeto implementa su propia definición de cierre, pero es asistida por una sugerencia proporcionada por el contenedor para que la proximidad se pueda ajustar a medida que las imágenes se acerquen más o menos.
En la imagen anterior, los puntos marcados como Hit, Close y Transparent serían todos aciertos de intensidad variable en el círculo, con la excepción del marcado Transparent( pero para la línea, close). Esto muestra el efecto de la diferente fuerza de los golpes. Dado que el círculo responde de forma transparente mientras se cierran las notificaciones de línea y es más débil que cerrar, la línea toma el acierto.
Notas para los implementadores
Se requiere un objeto compatible con IViewObjectEx para implementar este método al menos para el aspecto DVASPECT_CONTENT . El objeto no debe realizar ninguna otra acción en respuesta a este método que no sea para devolver la información; no debe haber efectos secundarios.Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows 2000 Professional [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows 2000 Server [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | ocidl.h |