Partager via


Méthode IOleInPlaceSiteWindowless ::GetDC (ocidl.h)

Fournit un objet avec un handle vers un contexte de périphérique pour un écran ou un appareil compatible à partir de son conteneur.

Syntaxe

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

Paramètres

[in] pRect

Pointeur vers le rectangle que l’objet souhaite redessiner, dans les coordonnées clientes de la fenêtre contenante. Si ce paramètre a la valeur NULL, l’étendue complète de l’objet est redessinée.

[in] grfFlags

Combinaison de valeurs de l’énumération OLEDCFLAGS .

[out] phDC

Pointeur vers un contexte d’appareil retourné.

Valeur retournée

Cette méthode retourne S_OK en cas de réussite. Les autres valeurs de retour possibles sont les suivantes.

Code de retour Description
OLE_E_NESTEDPAINT
Le conteneur se trouve déjà au milieu d’une session de peinture. Autrement dit, cette méthode a déjà été appelée et la méthode IOleInPlaceSiteWindowless ::ReleaseDC n’a pas encore été appelée.

Remarques

Un contexte d’appareil obtenu par cette méthode doit être libéré en appelant IOleInPlaceSiteWindowless ::ReleaseDC.

Comme les autres méthodes de cette interface, les rectangles sont spécifiés dans les coordonnées client de la fenêtre contenante. Le conteneur est censé croiser ce rectangle avec le rectangle de site de l’objet et couper tout ce qui se trouve en dehors du rectangle résultant. Cela empêche les objets de dessiner par inadvertance là où ils ne sont pas censés le faire.

Les conteneurs sont également censés mapper l’origine du contexte de l’appareil afin que l’objet puisse dessiner les coordonnées du client de la fenêtre contenante, généralement la fenêtre du conteneur. Si le conteneur transmet simplement son contexte d’appareil de fenêtre, cela se produit automatiquement. S’il retourne un autre contexte d’appareil, par exemple, un contexte de périphérique mémoire hors écran, l’origine de la fenêtre d’affichage doit être définie de manière appropriée.

Notes aux implémenteurs

Selon qu’il retourne un contexte d’appareil à l’écran ou hors écran et selon son niveau de sophistication, le conteneur peut utiliser l’un des algorithmes suivants :
  1. Dessin d’une passe à l’écran
    1. Dans la méthode IOleInPlaceSiteWindowless ::GetDC , le conteneur doit :
      • Obtenez le contexte de l’appareil de fenêtre.
      • Si OLEDC_PAINTBKGND est défini, dessinez l’aspect DVASPECT_CONTENT de chaque objet derrière l’objet qui demande le contexte de l’appareil.
      • Retourne le contexte de l’appareil.
    2. Dans la méthode ReleaseDC , le conteneur doit :
      • Dessinez les DVASPECT_CONTENT de chaque objet qui se chevauche.
      • Relâchez le contexte de l’appareil.
  2. Dessin à deux passes à l’écran
    1. Dans la méthode IOleInPlaceSiteWindowless ::GetDC , le conteneur doit :
      • Obtenez le contexte de l’appareil de fenêtre.
      • Couper les régions opaques de n’importe quel objet qui se chevauche. Ces régions n’ont pas besoin d’être redessinées, car elles sont déjà correctes à l’écran.
      • Si OLEDC_PAINTBKGND n’est pas défini, retournez le contexte de l’appareil.
      • Sinon, coupez les parties opaques de l’objet qui demandent le contexte de l’appareil et dessinez les parties opaques de chaque objet derrière lui de l’avant vers l’arrière.
      • Dessinez les aspects transparents de chaque objet derrière en arrière-plan, en définissant la zone de découpage de manière appropriée à chaque fois.
      • Enfin, retournez le contexte de l’appareil.
    2. Dans la méthode IOleInPlaceSiteWindowless ::ReleaseDC , le conteneur doit :
      • Dessinez les parties transparentes de chaque objet qui se chevauche.
      • Relâchez le contexte de l’appareil.
  3. Dessin hors écran
    1. Dans la méthode IOleInPlaceSiteWindowless ::GetDC , le conteneur doit :
      • Créez un contexte d’appareil mémoire compatible avec l’écran, contenant une image bitmap compatible de taille appropriée.
      • Mappez l’origine de la fenêtre d’affichage du contexte de l’appareil pour vous assurer que l’objet appelant peut dessiner à l’aide des coordonnées de la zone cliente de la fenêtre contenante.
      • Si OLEDC_PAINTBKGND est défini, dessinez le DVASPECT_CONTENT de chaque objet derrière l’objet appelant.
      • Retourne le contexte de l’appareil.
    2. Dans la méthode IOleInPlaceSiteWindowless ::ReleaseDC , le conteneur doit :
      • Dessinez l’aspect DVASPECT_CONTENT de chaque objet qui se chevauche.
      • Copiez l’image bitmap hors écran sur l’écran à l’emplacement de l’objet appelant initialement demandé dans IOleInPlaceSiteWindowless ::GetDC.
      • Supprimez et libérez le contexte de l’appareil mémoire.
Lorsque cette méthode retourne, la zone de découpage dans le contexte de l’appareil doit être définie de sorte que l’objet ne puisse pas peindre dans une zone qu’il n’est pas censé. Si l’objet n’est pas opaque, l’arrière-plan doit avoir été peint. Si le contexte de l’appareil est un écran, les zones opaques qui se chevauchent doivent être coupées.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
Plateforme cible Windows
En-tête ocidl.h

Voir aussi

IOleInPlaceSiteWindowless

IOleInPlaceSiteWindowless ::ReleaseDC

OLEDCFLAGS