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

Proporciona a un objeto un identificador de un contexto de dispositivo para una pantalla o dispositivo compatible de su contenedor.

Sintaxis

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

Parámetros

[in] pRect

Puntero al rectángulo que el objeto quiere volver a dibujar, en coordenadas de cliente de la ventana contenedora. Si este parámetro es NULL, se vuelve a dibujar la extensión completa del objeto.

[in] grfFlags

Combinación de valores de la enumeración OLEDCFLAGS .

[out] phDC

Puntero a un contexto de dispositivo devuelto.

Valor devuelto

Este método devuelve S_OK cuando funciona correctamente. Otros posibles valores devueltos son los siguientes.

Código devuelto Descripción
OLE_E_NESTEDPAINT
El contenedor ya está en medio de una sesión de pintura. Es decir, ya se ha llamado a este método y aún no se ha llamado al método IOleInPlaceSiteWindowless::ReleaseDC .

Comentarios

Se debe liberar un contexto de dispositivo obtenido por este método llamando a IOleInPlaceSiteWindowless::ReleaseDC.

Al igual que otros métodos de esta interfaz, los rectángulos se especifican en las coordenadas de cliente de la ventana contenedora. Se espera que el contenedor intersece este rectángulo con el rectángulo de sitio del objeto y recorte todo lo que está fuera del rectángulo resultante. Esto evita que los objetos se dibujen inadvertidamente donde no deben.

También se espera que los contenedores asignen el origen del contexto del dispositivo para que el objeto pueda dibujar en coordenadas de cliente de la ventana contenedora, normalmente la ventana del contenedor. Si el contenedor simplemente pasa su contexto de dispositivo de ventana, esto se produce automáticamente. Si devuelve otro contexto de dispositivo, por ejemplo, un contexto de dispositivo de memoria fuera de la pantalla, el origen de la ventanilla debe establecerse correctamente.

Notas para los implementadores

Dependiendo de si devuelve un contexto de dispositivo en pantalla o fuera de pantalla y, en función de lo sofisticado que sea, el contenedor puede usar uno de los algoritmos siguientes:
  1. Dibujo de un paso en pantalla
    1. En el método IOleInPlaceSiteWindowless::GetDC , el contenedor debe:
      • Obtenga el contexto del dispositivo de ventana.
      • Si se establece OLEDC_PAINTBKGND, dibuje el aspecto DVASPECT_CONTENT de cada objeto detrás del objeto que solicita el contexto del dispositivo.
      • Devuelve el contexto del dispositivo.
    2. En el método ReleaseDC , el contenedor debe:
      • Dibuje el DVASPECT_CONTENT de cada objeto superpuesto.
      • Libere el contexto del dispositivo.
  2. En pantalla, dibujo de dos pasos
    1. En el método IOleInPlaceSiteWindowless::GetDC , el contenedor debe:
      • Obtenga el contexto del dispositivo de ventana.
      • Recorte las regiones opacas de cualquier objeto superpuesto. Estas regiones no necesitan volver a dibujarse, ya que ya son correctas en la pantalla.
      • Si no se establece OLEDC_PAINTBKGND, devuelva el contexto del dispositivo.
      • De lo contrario, recorte las partes opacas del objeto que solicitan el contexto del dispositivo y dibuje las partes opacas de cada objeto detrás de él hacia delante hacia atrás.
      • Dibuje los aspectos transparentes de cada objeto detrás de volver al frente, estableciendo la región de recorte de forma adecuada cada vez.
      • Por último, devuelve el contexto del dispositivo.
    2. En el método IOleInPlaceSiteWindowless::ReleaseDC , el contenedor debe:
      • Dibuje las partes transparentes de cada objeto superpuesto.
      • Libere el contexto del dispositivo.
  3. Dibujo fuera de pantalla
    1. En el método IOleInPlaceSiteWindowless::GetDC , el contenedor debe:
      • Cree un contexto de dispositivo de memoria compatible con pantalla que contenga un mapa de bits compatible con el tamaño adecuado.
      • Asigne el origen de la ventanilla del contexto del dispositivo para asegurarse de que el objeto que realiza la llamada puede dibujar mediante coordenadas de área de cliente de la ventana contenedora.
      • Si se establece OLEDC_PAINTBKGND, dibuje el DVASPECT_CONTENT de cada objeto detrás del objeto que realiza la llamada.
      • Devuelve el contexto del dispositivo.
    2. En el método IOleInPlaceSiteWindowless::ReleaseDC , el contenedor debe:
      • Dibuje el aspecto DVASPECT_CONTENT de cada objeto superpuesto.
      • Copie el mapa de bits fuera de la pantalla en la ubicación que el objeto de llamada solicitó originalmente en IOleInPlaceSiteWindowless::GetDC.
      • Elimine y libere el contexto del dispositivo de memoria.
Cuando este método devuelve, se debe establecer la región de recorte en el contexto del dispositivo para que el objeto no pueda pintar en ningún área a la que se supone que no lo haga. Si el objeto no es opaco, el fondo debe haberse pintado. Si el contexto del dispositivo es una pantalla, se deben recortar las áreas opacas superpuestas.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado ocidl.h

Consulte también

IOleInPlaceSiteWindowless

IOleInPlaceSiteWindowless::ReleaseDC

OLEDCFLAGS