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 。 其他可能的返回值包括以下内容。

返回代码 说明
E_FAIL
此方法未针对请求的方面实现。 请改用 DVASPECT_CONTENT

注解

为了支持对非矩形对象进行命中检测,容器需要一种可靠的方法来询问对象给定的位置是否在其绘图方面之一内。 此函数由 IViewObjectEx::QueryHitPoint 提供。

注意 由于此方法是 IViewObjectEx 接口的一部分,因此容器可以判断鼠标是否在对象上命中,而不必启动服务器。 如果命中恰好在 对象内,则很可能对象将就地激活并启动服务器。
 
通常,容器首先快速确定给定位置是否在对象的矩形范围内。 如果位置在对象的矩形范围内,容器将调用 IViewObjectEx::QueryHitPoint 来确认该位置实际上在对象内。 命中位置在容器窗口的客户端坐标中传递。 由于调用此方法时对象可能处于非活动状态,因此同一坐标系中对象的边框也会传递给此方法,类似于 IPointerInactive::OnInactiveSetCursor 中发生的情况。

可能返回的值包括:

  • 在透明区域外部
  • 小对象或薄对象可以使用足够接近的命中 (,)
IViewObjectEx::QueryHitPoint 与为其调用的对象子对象无关。 它仅指示鼠标命中是否在对象内。

可以为对象支持的任何绘图方面调用 IViewObjectEx::QueryHitPoint。 如果请求的绘图方面不支持它,则它应该会失败。

透明对象可能希望实现一种复杂的命中检测机制,在该机制中,用户可以选择透明对象或其后面的对象,具体取决于在对象内单击的确切位置。 例如,显示足够大文本的透明文本框可能允许用户在字符之间单击时选择后面的对象,例如位图。 因此, IViewObjectEx::QueryHitPoint 返回的信息包括有关命中发生在不透明区域还是透明区域的指示。

非矩形和透明命中检测的一个示例是透明圆圈控件,其后面有一个对象 (一条线,在下面的示例中) :

带有对角线的圆图,其中显示了圆内外以及线附近的区域的命中检测值。

显示的值用于针对圆的命中测试;灰色区域不是控件的一部分,但在此处显示,以指示图像周围的区域被视为接近。 每个对象实现其自己的 close 定义,但受容器提供的提示的辅助,以便可以在图像放大或缩小时调整接近度。

在上图中,标记为“命中”、“关闭”和“透明”的点都将在圆上受到不同强度的命中,除了标记为透明、 (但对于线条,关闭) 。 这说明了不同命中强度的效果。 由于圆圈响应透明,而线条声明关闭,透明弱于接近,因此线条将获取命中。

实施者说明

至少对于DVASPECT_CONTENT方面,需要支持 IViewObjectEx 的对象才能实现此方法。 对象不应在响应此方法时执行任何其他操作,只应返回信息;不应有副作用。

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 ocidl.h

另请参阅

HITRESULT

IPointerInactive::OnInactiveSetCursor

IViewObjectEx