共用方式為


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 。 其他可能的傳回值包括下列專案。

傳回碼 Description
E_FAIL
這個方法不會針對要求的層面實作。 請改用 DVASPECT_CONTENT

備註

為了在非矩形物件上支援點擊偵測,容器需要可靠的方法來詢問物件是否位於其中一個繪圖層面內。 此函式是由 IViewObjectEx::QueryHitPoint 提供。

注意 因為此方法是 IViewObjectEx 介面的一部分,所以容器可以判斷滑鼠點擊是否位於物件上,而不需要啟動伺服器。 如果點擊發生於 物件內部,則物件可能就地啟動且伺服器已啟動。
 
一般而言,容器會先快速判斷指定的位置是否在物件的矩形範圍內。 如果位置在物件的矩形範圍內,容器會呼叫 IViewObjectEx::QueryHitPoint 來確認該位置實際上是在對象內部。 點擊位置會傳入容器視窗的用戶端座標中。 由於呼叫此方法時,物件可能處於非作用中狀態,因此相同座標系統中物件的周框也會傳遞至此方法,類似於 IPointerInactive::OnInactiveSetCursor 中發生的情況。

可能的傳回值包括:

  • 在透明區域外部
  • 小型或精簡物件可能會使用足以視為點擊 ()
IViewObjectEx::QueryHitPoint 不擔心其所呼叫對象的子物件。 它只會指出滑鼠點擊是否在物件內。

您可以針對物件支援的任何繪圖層面呼叫 IViewObjectEx::QueryHitPoint。 如果要求繪圖層面不支援,則它應該會失敗。

透明物件可能會想要實作複雜的點擊偵測機制,讓使用者可以選取透明物件或其後方的對象,視物件內的點選位置而定。 例如,顯示足夠大文字的透明文本框,可讓使用者在字元之間按兩下時選取物件後置的物件,例如點陣圖。 基於這個理由, IViewObjectEx::QueryHitPoint 所傳回的資訊包含有關點擊是否在不透明或透明區域中發生的指示。

非矩形和透明點擊偵測的範例是一個透明圓形控件,其後方的物件 (下列範例中的一行) :

具有對角線的圓形圖表,其中顯示圓形內部和外部和線條附近的點擊偵測值。

顯示的值為針對圓形進行點擊測試;灰色區域不是控件的一部分,但會顯示在這裡,以指出影像周圍被視為關閉的區域。 每個物件都會實作自己的關閉定義,但由容器提供的提示所協助,讓影像放大或縮小時可以調整關閉程度。

在上圖中,標示為 [點擊]、[關閉] 和 [透明] 的點全都是圓形上不同強度的點擊,但標示為透明、 (但針對線條,請關閉) 。 這說明點擊不同強度的效果。 因為圓形在行宣告關閉時回應透明,而且透明比關閉更弱,所以該行會叫用。

實作者的注意事項

至少需要支援 IViewObjectEx 的物件,才能針對 DVASPECT_CONTENT 層面實作這個方法。 對象不應該採取任何其他動作來響應這個方法,而不是傳回資訊;不應該有任何副作用。

規格需求

需求
最低支援的用戶端 Windows 2000 專業版 [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限傳統型應用程式]
目標平台 Windows
標頭 ocidl.h

另請參閱

HITRESULT

IPointerInactive::OnInactiveSetCursor

IViewObjectEx