IViewObjectEx::QueryHitPoint-Methode (ocidl.h)
Gibt an, ob sich ein Punkt innerhalb eines bestimmten Aspekts eines Objekts befindet.
Syntax
HRESULT QueryHitPoint(
[in] DWORD dwAspect,
[in] LPCRECT pRectBounds,
[in] POINT ptlLoc,
[in] LONG lCloseHint,
[out] DWORD *pHitResult
);
Parameter
[in] dwAspect
Der angeforderte Zeichnungsaspekt.
[in] pRectBounds
Ein umschließendes Objektrechteck in Clientkoordinaten des enthaltenden Fensters. Dieses Rechteck wird berechnet und vom Container übergeben, damit das Objekt die Trefferposition sinnvoll interpretieren kann.
[in] ptlLoc
Die Trefferposition in Clientkoordinaten des enthaltenden Fensters.
[in] lCloseHint
Vorgeschlagene Entfernung in HIMETRIC-Einheiten , die vom Container als nahe betrachtet werden. Dieser Wert ist ein Hinweis, und Objekte können ihn auf eigene Weise interpretieren. Objekte können diesen Hinweis auch verwenden, um die Ausgabeauflösung grob abzuleiten, um die Erweiterbarkeit der Treffertestimplementierung auszuwählen.
[out] pHitResult
Ein Zeiger auf zurückgegebene Informationen zum Treffer, ausgedrückt als HITRESULT-Enumerationswerte .
Rückgabewert
Diese Methode gibt bei Erfolg S_OK zurück. Weitere mögliche Rückgabewerte:
Rückgabecode | Beschreibung |
---|---|
|
Diese Methode ist für den angeforderten Aspekt nicht implementiert. Verwenden Sie stattdessen DVASPECT_CONTENT . |
Hinweise
Um die Treffererkennung für nicht rechteckige Objekte zu unterstützen, benötigt der Container eine zuverlässige Möglichkeit, ein Objekt zu fragen, ob sich eine bestimmte Position in einem seiner Zeichnungsaspekte befindet. Diese Funktion wird von IViewObjectEx::QueryHitPoint bereitgestellt.
Mögliche zurückgegebene Werte sind:
- Außen, in einer transparenten Region
- Nah genug, um als Treffer angesehen zu werden (kann von kleinen oder dünnen Objekten verwendet werden)
- Getroffen
IViewObjectEx::QueryHitPoint kann für alle Zeichnungsaspekte aufgerufen werden, die von einem Objekt unterstützt werden. Es sollte ein Fehler auftreten, wenn der für den angeforderten Zeichnungsaspekt nicht unterstützt wird.
Transparente Objekte möchten möglicherweise einen komplexen Mechanismus zur Treffererkennung implementieren, bei dem der Benutzer entweder das transparente Objekt oder ein Objekt dahinter auswählen kann, je nachdem, wo genau der Klick innerhalb des Objekts erfolgt. Ein transparentes Textfeld mit ausreichend großem Text kann es dem Benutzer beispielsweise ermöglichen, das dahinter enthaltene Objekt auszuwählen, z. B. eine Bitmap, wenn der Benutzer zwischen den Zeichen klickt. Aus diesem Grund enthalten die von IViewObjectEx::QueryHitPoint zurückgegebenen Informationen Hinweise darüber, ob der Treffer in einem undurchsichtigen oder transparenten Bereich erfolgt.
Ein Beispiel für die nicht rechteckige und transparente Treffererkennung ist ein transparentes Kreissteuerelement mit einem Objekt dahinter (eine Zeile im folgenden Beispiel):
Die angezeigten Werte sind für Treffertests am Kreis; Graubereiche sind nicht Teil des Steuerelements, werden aber hier angezeigt, um einen Bereich um das Bild anzuzeigen, das als nah angesehen wird. Jedes Objekt implementiert seine eigene Definition von close, wird jedoch von einem Hinweis unterstützt, der vom Container bereitgestellt wird, sodass die Nähe angepasst werden kann, wenn Bilder vergrößert oder verkleinern.
In der obigen Abbildung wären die punkte, die als Treffer, Schließen und Transparent gekennzeichnet sind, alle Treffer mit unterschiedlicher Stärke auf dem Kreis, mit Ausnahme des als Transparent markierten Punktes (für die Linie jedoch schließend). Dies veranschaulicht die Wirkung der unterschiedlichen Trefferstärke. Da der Kreis transparent reagiert, während die Linie geschlossen werden soll und transparent schwächer als schließen ist, nimmt die Linie den Treffer.
Hinweise für Implementierer
Ein Objekt, das IViewObjectEx unterstützt, ist erforderlich, um diese Methode zumindest für den DVASPECT_CONTENT Aspekt zu implementieren. Das Objekt sollte als Reaktion auf diese Methode keine andere Aktion ausführen, außer die Informationen zurückzugeben. es sollte keine Nebenwirkungen geben.Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows 2000 Professional [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows 2000 Server [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | ocidl.h |