IOleInPlaceSiteWindowless::GetDC-Methode (ocidl.h)

Enthält ein Objekt mit einem Handle für einen Gerätekontext für einen Bildschirm oder ein kompatibles Gerät von seinem Container.

Syntax

HRESULT GetDC(
  [in]  LPCRECT pRect,
  [in]  DWORD   grfFlags,
  [out] HDC     *phDC
);

Parameter

[in] pRect

Ein Zeiger auf das Rechteck, das das Objekt in Clientkoordinaten des enthaltenden Fensters neu zeichnen möchte. Wenn dieser Parameter NULL ist, wird die vollständige Ausdehnung des Objekts neu gezeichnet.

[in] grfFlags

Eine Kombination von Werten aus der OLEDCFLAGS-Enumeration .

[out] phDC

Ein Zeiger auf einen zurückgegebenen Gerätekontext.

Rückgabewert

Diese Methode gibt S_OK bei Erfolg zurück. Weitere mögliche Rückgabewerte:

Rückgabecode Beschreibung
OLE_E_NESTEDPAINT
Der Container befindet sich bereits in der Mitte einer Paint-Sitzung. Das heißt, diese Methode wurde bereits aufgerufen, und die IOleInPlaceSiteWindowless::ReleaseDC-Methode wurde noch nicht aufgerufen.

Hinweise

Ein von dieser Methode abgerufener Gerätekontext sollte durch Aufrufen von IOleInPlaceSiteWindowless::ReleaseDC freigegeben werden.

Wie andere Methoden in dieser Schnittstelle werden Rechtecke in Clientkoordinaten des enthaltenden Fensters angegeben. Es wird erwartet, dass der Container dieses Rechteck mit dem Websiterechteck des Objekts überschneidet und alles außerhalb des resultierenden Rechtecks ausschneidet. Dadurch wird verhindert, dass Objekte versehentlich zeichnen, wo sie nicht vorgesehen sind.

Von Containern wird auch erwartet, dass sie den Ursprung des Gerätekontexts zuordnen, damit das Objekt Clientkoordinaten des enthaltenden Fensters zeichnen kann, in der Regel das Fenster des Containers. Wenn der Container lediglich seinen Fenstergerätekontext übergibt, geschieht dies automatisch. Wenn ein anderer Gerätekontext zurückgegeben wird, z. B. einen Offscreen-Speichergerätekontext, sollte der Viewportursprung entsprechend festgelegt werden.

Hinweise für Implementierer

Abhängig davon, ob ein Gerätekontext auf dem Bildschirm oder off-Screen zurückgegeben wird, und je nachdem, wie anspruchsvoll dieser ist, kann container einen der folgenden Algorithmen verwenden:
  1. On-screen, One Pass Drawing
    1. In der IOleInPlaceSiteWindowless::GetDC-Methode sollte der Container:
      • Ruft den Fenstergerätekontext ab.
      • Wenn OLEDC_PAINTBKGND festgelegt ist, zeichnen Sie den DVASPECT_CONTENT Aspekt jedes Objekts hinter dem Objekt, das den Gerätekontext anfordert.
      • Gibt den Gerätekontext zurück.
    2. In der ReleaseDC-Methode sollte der Container Folgendes ausführen:
      • Zeichnen Sie die DVASPECT_CONTENT jedes überlappenden Objekts.
      • Geben Sie den Gerätekontext frei.
  2. Auf dem Bildschirm, Zeichnung mit zwei Durchlaufs
    1. In der IOleInPlaceSiteWindowless::GetDC-Methode sollte der Container:
      • Ruft den Fenstergerätekontext ab.
      • Schneiden Sie die undurchsichtigen Bereiche eines überlappenden Objekts aus. Diese Bereiche müssen nicht neu gezeichnet werden, da sie bereits auf dem Bildschirm korrekt sind.
      • Wenn OLEDC_PAINTBKGND nicht festgelegt ist, geben Sie den Gerätekontext zurück.
      • Schneiden Sie andernfalls die undurchsichtigen Teile des Objekts aus, das den Gerätekontext anfordert, und zeichnen Sie die undurchsichtigen Teile jedes Objekts dahinter von vorne nach hinten.
      • Zeichnen Sie die transparenten Aspekte jedes Objekts im Hintergrund zurück, und legen Sie den Beschneidungsbereich jedes Mal entsprechend fest.
      • Geben Sie schließlich den Gerätekontext zurück.
    2. In der IOleInPlaceSiteWindowless::ReleaseDC-Methode sollte der Container Folgendes ausführen:
      • Zeichnen Sie die transparenten Teile jedes überlappenden Objekts.
      • Geben Sie den Gerätekontext frei.
  3. Off-Screen-Zeichnung
    1. In der IOleInPlaceSiteWindowless::GetDC-Methode sollte der Container:
      • Erstellen Sie einen bildschirmkompatiblen Speichergerätekontext, der eine kompatible Bitmap von geeigneter Größe enthält.
      • Ordnen Sie den Viewportursprung des Gerätekontexts zu, um sicherzustellen, dass das aufrufende Objekt mithilfe der Clientbereichkoordinaten des enthaltenden Fensters zeichnen kann.
      • Wenn OLEDC_PAINTBKGND festgelegt ist, zeichnen Sie die DVASPECT_CONTENT jedes Objekts hinter dem aufrufenden Objekt.
      • Gibt den Gerätekontext zurück.
    2. In der IOleInPlaceSiteWindowless::ReleaseDC-Methode sollte der Container Folgendes ausführen:
      • Zeichnen Sie den DVASPECT_CONTENT Aspekt jedes überlappenden Objekts.
      • Kopieren Sie die Offscreen-Bitmap auf den Bildschirm an der Stelle, an der das aufrufende Objekt ursprünglich in IOleInPlaceSiteWindowless::GetDC angefordert wurde.
      • Löschen Und freigeben Sie den Kontext des Speichergeräts.
Wenn diese Methode zurückgibt, sollte der Beschneidungsbereich im Gerätekontext so festgelegt werden, dass das Objekt in keinem Bereich zeichnen kann, für den es nicht vorgesehen ist. Wenn das Objekt nicht undurchsichtig ist, sollte der Hintergrund gezeichnet worden sein. Wenn der Gerätekontext ein Bildschirm ist, sollten alle überlappenden undurchsichtigen Bereiche ausgeschnitten werden.

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

IOleInPlaceSiteWindowless::ReleaseDC

OLEDCFLAGS