Share via


IOleInPlaceSiteWindowless::ScrollRect-Methode (ocidl.h)

Ermöglicht einem Objekt, einen Bildlauf zu einem Bereich durchführen, der sich innerhalb seines direkt aktiven Bildes auf dem Bildschirm befindet.

Syntax

HRESULT ScrollRect(
  [in] INT     dx,
  [in] INT     dy,
  [in] LPCRECT pRectScroll,
  [in] LPCRECT pRectClip
);

Parameter

[in] dx

Der Betrag, der um die x-Achse scrollen soll.

[in] dy

Der Betrag, der auf der y-Achse gescrollt werden soll.

[in] pRectScroll

Das Zu scrollende Rechteck in Clientkoordinaten des enthaltenden Fensters. Der Wert NULL gibt das vollständige Objekt an.

[in] pRectClip

Das zu beschneidende Rechteck. Nur Pixel mit Bildlauf in dieses Rechteck werden gezeichnet. Pixel, bei denen ein Bildlauf aus dem Rechteck durchgeführt wird, werden nicht gezeichnet. Wenn dieser Parameter NULL ist, wird das Rechteck nicht abgeschnitten.

Rückgabewert

Diese Methode gibt S_OK bei Erfolg zurück.

Hinweise

Bei dieser Methode sollte berücksichtigt werden, dass der Aufrufer transparent sein kann und dass es undurchsichtige oder transparente überlappende Objekte geben kann. Vorschläge zu Algorithmen, die von dieser Methode verwendet werden können, finden Sie unten unter Hinweise zu Implementierern.

Hinweise zu Implementierern

Container können diese Methode auf unterschiedliche Weise implementieren. Alle sollten jedoch die Möglichkeit berücksichtigen, dass das Objekt, das das Scrollen anfordert, transparent ist oder keinen soliden Hintergrund aufweist. Container sollten auch berücksichtigen, dass es sich möglicherweise überlappende Objekte gibt.

Die einfachste Möglichkeit, diese Methode zu implementieren, besteht darin, das Rechteck einfach neu zu zeichnen, um zu scrollen.

Eine zusätzliche Einschränkung dieser einfachen Implementierung besteht darin, die ScrollDC-Funktion zu verwenden, wenn das Objekt, das den Bildlauf anfordert, undurchsichtig ist, das Objekt einen festen Hintergrund hat und keine sich überlappenden Objekte vorhanden sind.

Komplexere Implementierungen können das folgende Verfahren verwenden:

  • Überprüfen Sie mithilfe von IViewObjectEx::GetViewStatus, ob das Objekt undurchsichtig ist und einen soliden Hintergrund aufweist. Andernfalls müssen Sie einfach das Rechteck für den Bildlauf ungültig machen. Eine zusätzliche Einschränkung besteht darin, zu überprüfen, ob sich das Scrollrechteck vollständig im undurchsichtigen Bereich eines teilweise transparenten Objekts befindet.
  • Rufen Sie den Gerätekontext des Fensters ab.
  • Schneiden Sie die undurchsichtigen Teile eines überlappenden Objekts aus, das von IViewObjectEx::GetRect zurückgegeben wird.
  • Rufen Sie abschließend die ScrollDC-Funktion auf.
  • Zeichnen Sie die zuvor ungültigen transparenten Teile eines überlappenden Objekts neu.
Unabhängig vom Scroll- und Clipping-Rechteck werden nur Pixel im Siterechteck des Objekts dargestellt. Der durch den Bildlaufvorgang aufgedeckte Bereich wird ungültig und sofort neu gezeichnet, bevor diese Methode zurückgibt.

Alle von dieser Methode generierten Neuschreibungen sollten synchron erfolgen, bevor diese Methode zurückgibt.

Diese Methode sollte das Caret während des Bildlaufvorgangs automatisch ausblenden und das Caret um die scrollenden Mengen verschieben, wenn es sich innerhalb des Cliprechtecks befindet.

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

Weitere Informationen

IOleInPlaceSiteWindowless

IViewObjectEx::GetRect

IViewObjectEx::GetViewStatus