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 |
---|---|
|
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:-
On-screen, One Pass Drawing
- In der IOleInPlaceSiteWindowless::GetDC-Methode sollte der Container:
- In der ReleaseDC-Methode sollte der Container Folgendes ausführen:
- Zeichnen Sie die DVASPECT_CONTENT jedes überlappenden Objekts.
- Geben Sie den Gerätekontext frei.
-
Auf dem Bildschirm, Zeichnung mit zwei Durchlaufs
- 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.
- 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.
- In der IOleInPlaceSiteWindowless::GetDC-Methode sollte der Container:
-
Off-Screen-Zeichnung
- 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.
- 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.
- In der IOleInPlaceSiteWindowless::GetDC-Methode sollte der Container:
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 |