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 定义,但受容器提供的提示的辅助,以便可以在图像放大或缩小时调整接近度。
在上图中,标记为“命中”、“关闭”和“透明”的点都将在圆上受到不同强度的命中,除了标记为透明、 (但对于线条,关闭) 。 这说明了不同命中强度的效果。 由于圆圈响应透明,而线条声明关闭,透明弱于接近,因此线条将获取命中。
实施者说明
至少对于DVASPECT_CONTENT方面,需要支持 IViewObjectEx 的对象才能实现此方法。 对象不应在响应此方法时执行任何其他操作,只应返回信息;不应有副作用。要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | ocidl.h |