Compartilhar via


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

Fornece um objeto com um identificador para um contexto de dispositivo para uma tela ou dispositivo compatível de seu contêiner.

Sintaxe

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

Parâmetros

[in] pRect

Um ponteiro para o retângulo que o objeto deseja redesenhar, nas coordenadas do cliente da janela que contém. Se esse parâmetro for NULL, a extensão total do objeto será redesenhada.

[in] grfFlags

Uma combinação de valores da enumeração OLEDCFLAGS .

[out] phDC

Um ponteiro para um contexto de dispositivo retornado.

Retornar valor

Esse método retorna S_OK com êxito. Outros valores retornados possíveis incluem o seguinte.

Código de retorno Descrição
OLE_E_NESTEDPAINT
O contêiner já está no meio de uma sessão de pintura. Ou seja, esse método já foi chamado e o método IOleInPlaceSiteWindowless::ReleaseDC ainda não foi chamado.

Comentários

Um contexto de dispositivo obtido por esse método deve ser liberado chamando IOleInPlaceSiteWindowless::ReleaseDC.

Como outros métodos nessa interface, os retângulos são especificados nas coordenadas do cliente da janela que contém. Espera-se que o contêiner intersecione esse retângulo com o retângulo do site do objeto e recorte tudo fora do retângulo resultante. Isso impede que objetos desenham inadvertidamente onde eles não deveriam.

Os contêineres também devem mapear a origem do contexto do dispositivo para que o objeto possa desenhar as coordenadas do cliente da janela que contém, geralmente a janela do contêiner. Se o contêiner estiver apenas passando o contexto do dispositivo de janela, isso ocorrerá automaticamente. Se ele estiver retornando outro contexto de dispositivo, por exemplo, um contexto de dispositivo de memória fora da tela, a origem do visor deverá ser definida adequadamente.

Anotações aos implementadores

Dependendo se ele estiver retornando um contexto de dispositivo na tela ou fora da tela e dependendo de quão sofisticado ele é, o contêiner pode usar um dos seguintes algoritmos:
  1. Na tela, desenho de um passe
    1. No método IOleInPlaceSiteWindowless::GetDC , o contêiner deve:
      • Obter o contexto do dispositivo de janela.
      • Se o OLEDC_PAINTBKGND estiver definido, desenhe o aspecto DVASPECT_CONTENT de cada objeto por trás do objeto que solicita o contexto do dispositivo.
      • Retornar o contexto do dispositivo.
    2. No método ReleaseDC , o contêiner deve:
      • Desenhe o DVASPECT_CONTENT de cada objeto sobreposto.
      • Libere o contexto do dispositivo.
  2. Na tela, desenho de duas passões
    1. No método IOleInPlaceSiteWindowless::GetDC , o contêiner deve:
      • Obter o contexto do dispositivo de janela.
      • Recorte as regiões opacas de qualquer objeto sobreposto. Essas regiões não precisam ser redesenhadas, pois já estão corretas na tela.
      • Se OLEDC_PAINTBKGND não estiver definido, retorne o contexto do dispositivo.
      • Caso contrário, recorte as partes opacas do objeto solicitando o contexto do dispositivo e desenhe as partes opacas de cada objeto atrás dele indo de frente para trás.
      • Desenhe os aspectos transparentes de cada objeto por trás da volta para a frente, definindo a região de recorte adequadamente a cada vez.
      • Por fim, retorne o contexto do dispositivo.
    2. No método IOleInPlaceSiteWindowless::ReleaseDC , o contêiner deve:
      • Desenhe as partes transparentes de cada objeto sobreposto.
      • Libere o contexto do dispositivo.
  3. Desenho fora da tela
    1. No método IOleInPlaceSiteWindowless::GetDC , o contêiner deve:
      • Crie um contexto de dispositivo de memória compatível com tela, contendo um bitmap compatível de tamanho apropriado.
      • Mapeie a origem do visor do contexto do dispositivo para garantir que o objeto de chamada possa ser desenhado usando as coordenadas da área do cliente da janela que contém.
      • Se OLEDC_PAINTBKGND estiver definido, desenhe o DVASPECT_CONTENT de cada objeto por trás do objeto de chamada.
      • Retornar o contexto do dispositivo.
    2. No método IOleInPlaceSiteWindowless::ReleaseDC , o contêiner deve:
      • Desenhe o aspecto DVASPECT_CONTENT de cada objeto sobreposto.
      • Copie o bitmap fora da tela para a tela no local em que o objeto de chamada foi solicitado originalmente em IOleInPlaceSiteWindowless::GetDC.
      • Exclua e solte o contexto do dispositivo de memória.
Quando esse método retorna, a região de recorte no contexto do dispositivo deve ser definida para que o objeto não possa pintar em nenhuma área que não deveria. Se o objeto não for opaco, a tela de fundo deverá ter sido pintada. Se o contexto do dispositivo for uma tela, todas as áreas opacas sobrepostas deverão ser cortadas.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho ocidl.h

Confira também

Ioleinplacesitewindowless

IOleInPlaceSiteWindowless::ReleaseDC

OLEDCFLAGS