Condividi tramite


Metodo IOleInPlaceSiteWindowless::GetDC (ocidl.h)

Fornisce un oggetto con un handle a un contesto di dispositivo per una schermata o un dispositivo compatibile dal contenitore.

Sintassi

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

Parametri

[in] pRect

Puntatore al rettangolo che l'oggetto desidera ridisegnare, nelle coordinate client della finestra contenitore. Se questo parametro è NULL, l'extent completo dell'oggetto viene ridisegnato.

[in] grfFlags

Combinazione di valori dell'enumerazione OLEDCFLAGS .

[out] phDC

Puntatore a un contesto di dispositivo restituito.

Valore restituito

Questo metodo restituisce S_OK se l'operazione ha esito positivo. Gli altri valori restituiti possibili includono i seguenti:

Codice restituito Descrizione
OLE_E_NESTEDPAINT
Il contenitore è già al centro di una sessione di disegno. Questo metodo è già stato chiamato e il metodo IOleInPlaceSiteWindowless::ReleaseDC non è ancora stato chiamato.

Commenti

Un contesto di dispositivo ottenuto da questo metodo deve essere rilasciato chiamando IOleInPlaceSiteWindowless::ReleaseDC.

Analogamente ad altri metodi in questa interfaccia, i rettangoli vengono specificati nelle coordinate client della finestra contenitore. Si prevede che il contenitore interseci questo rettangolo con il rettangolo del sito dell'oggetto e ritaglii tutti gli elementi all'esterno del rettangolo risultante. Ciò impedisce agli oggetti di disegnare inavvertitamente dove non devono essere usati.

I contenitori devono anche eseguire il mapping dell'origine del contesto di dispositivo in modo che l'oggetto possa disegnare nelle coordinate client della finestra contenitore, in genere la finestra del contenitore. Se il contenitore passa semplicemente il contesto di dispositivo della finestra, questo avviene automaticamente. Se restituisce un altro contesto di dispositivo, ad esempio un contesto di dispositivo di memoria offscreen, l'origine del riquadro di visualizzazione deve essere impostata in modo appropriato.

Note per gli implementatori

A seconda che restituisca un contesto di dispositivo su schermo o fuori schermo e a seconda di quanto sia sofisticato, il contenitore può usare uno degli algoritmi seguenti:
  1. Su schermo, disegno one pass
    1. Nel metodo IOleInPlaceSiteWindowless::GetDC il contenitore deve:
      • Ottenere il contesto del dispositivo della finestra.
      • Se è impostato OLEDC_PAINTBKGND, disegnare l'aspetto DVASPECT_CONTENT di ogni oggetto dietro l'oggetto che richiede il contesto di dispositivo.
      • Restituisce il contesto del dispositivo.
    2. Nel metodo ReleaseDC il contenitore deve:
      • Disegnare la DVASPECT_CONTENT di ogni oggetto sovrapposto.
      • Rilasciare il contesto del dispositivo.
  2. Disegno a due passaggi sullo schermo
    1. Nel metodo IOleInPlaceSiteWindowless::GetDC il contenitore deve:
      • Ottenere il contesto del dispositivo della finestra.
      • Ritaglia le aree opache di qualsiasi oggetto sovrapposto. Queste aree non devono essere ridisegnate perché sono già corrette sullo schermo.
      • Se OLEDC_PAINTBKGND non è impostato, restituire il contesto del dispositivo.
      • In caso contrario, ritagliare le parti opache dell'oggetto che richiede il contesto del dispositivo e disegnare le parti opache di ogni oggetto dietro di esso andando di nuovo indietro.
      • Disegnare gli aspetti trasparenti di ogni oggetto dietro il ritorno davanti, impostando l'area di ritaglio in modo appropriato ogni volta.
      • Restituire infine il contesto del dispositivo.
    2. Nel metodo IOleInPlaceSiteWindowless::ReleaseDC il contenitore deve:
      • Disegnare le parti trasparenti di ogni oggetto sovrapposto.
      • Rilasciare il contesto del dispositivo.
  3. Disegno fuori schermo
    1. Nel metodo IOleInPlaceSiteWindowless::GetDC il contenitore deve:
      • Creare un contesto di dispositivo di memoria compatibile con lo schermo, contenente una bitmap compatibile con le dimensioni appropriate.
      • Eseguire il mapping dell'origine del riquadro di visualizzazione del contesto di dispositivo per garantire che l'oggetto chiamante possa disegnare usando le coordinate dell'area client della finestra contenitore.
      • Se OLEDC_PAINTBKGND è impostato, disegnare la DVASPECT_CONTENT di ogni oggetto dietro l'oggetto chiamante.
      • Restituisce il contesto del dispositivo.
    2. Nel metodo IOleInPlaceSiteWindowless::ReleaseDC il contenitore deve:
      • Disegnare l'aspetto DVASPECT_CONTENT di ogni oggetto sovrapposto.
      • Copiare la bitmap fuori schermo nella schermata nella posizione in cui l'oggetto chiamante originariamente richiesto in IOleInPlaceSiteWindowless::GetDC.
      • Eliminare e rilasciare il contesto del dispositivo di memoria.
Al termine di questo metodo, l'area di ritaglio nel contesto del dispositivo deve essere impostata in modo che l'oggetto non possa disegnare in un'area che non dovrebbe essere impostata. Se l'oggetto non è opaco, lo sfondo deve essere stato disegnato. Se il contesto del dispositivo è uno schermo, le aree opache sovrapposte devono essere ritagliate.

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione ocidl.h

Vedi anche

IOleInPlaceSiteWindowless

IOleInPlaceSiteWindowless::ReleaseDC

OLEDCFLAGS