Método IViewObject::D raw (oleidl.h)
Desenha uma representação de um objeto no contexto do dispositivo especificado.
Sintaxe
HRESULT Draw(
[in] DWORD dwDrawAspect,
[in] LONG lindex,
[in] void *pvAspect,
[in] DVTARGETDEVICE *ptd,
[in] HDC hdcTargetDev,
[in] HDC hdcDraw,
[in] LPCRECTL lprcBounds,
[in] LPCRECTL lprcWBounds,
[in] BOOL(* )(ULONG_PTR dwContinue) pfnContinue,
[in] ULONG_PTR dwContinue
);
Parâmetros
[in] dwDrawAspect
Especifica o aspecto a ser desenhado, ou seja, como o objeto deve ser representado. As representações incluem conteúdo, um ícone, uma miniatura ou um documento impresso. Os valores válidos são obtidos das enumerações DVASPECT e DVASPECT2. Observe que objetos e contêineres mais recentes que dão suporte a interfaces de desenho otimizadas dão suporte aos valores de enumeração DVASPECT2 . Objetos e contêineres mais antigos que não dão suporte a interfaces de desenho otimizadas podem não dar suporte a DVASPECT2. Objetos sem janela permitem apenas DVASPECT_CONTENT, DVASPECT_OPAQUE e DVASPECT_TRANSPARENT.
[in] lindex
Parte do objeto que é de interesse para a operação de desenho. Sua interpretação varia dependendo do valor no parâmetro dwAspect. Consulte a enumeração DVASPECT para obter mais informações.
[in] pvAspect
Ponteiro para informações adicionais em uma estrutura DVASPECTINFO que permite otimizações de desenho dependendo do aspecto especificado. Observe que objetos e contêineres mais recentes que dão suporte a interfaces de desenho otimizadas também dão suporte a esse parâmetro. Objetos e contêineres mais antigos que não dão suporte a interfaces de desenho otimizadas sempre especificam NULL para esse parâmetro.
[in] ptd
Ponteiro para a estrutura DVTARGETDEVICE que descreve o dispositivo para o qual o objeto deve ser renderizado. Se FOR NULL, a exibição deverá ser renderizada para o dispositivo de destino padrão (normalmente a exibição). Um valor diferente de NULL é interpretado em conjunto com hdcTargetDev e hdcDraw. Por exemplo, se hdcDraw especificar uma impressora como o contexto do dispositivo, o parâmetro ptd apontará para uma estrutura que descreve esse dispositivo de impressora. Os dados poderão realmente ser impressos se hdcTargetDev for um valor válido ou poderão ser exibidos no modo de visualização de impressão se hdcTargetDev for NULL.
[in] hdcTargetDev
Contexto de informações para o dispositivo de destino indicado pelo parâmetro ptd do qual o objeto pode extrair métricas do dispositivo e testar os recursos do dispositivo. Se ptd for NULL; o objeto deve ignorar o valor no parâmetro hdcTargetDev .
[in] hdcDraw
Contexto do dispositivo no qual desenhar. Para um objeto sem janelas, o parâmetro hdcDraw deve estar no modo de mapeamento MM_TEXT com suas coordenadas lógicas que correspondem às coordenadas do cliente da janela que contém. Para um objeto sem janelas, o contexto do dispositivo deve estar no mesmo estado que o normalmente passado por uma mensagem WM_PAINT.
[in] lprcBounds
Ponteiro para uma estrutura RECTL especificando o retângulo em hdcDraw e no qual o objeto deve ser desenhado. Esse parâmetro controla o posicionamento e o alongamento do objeto. Esse parâmetro deve ser NULL para desenhar um objeto ativo in-loco sem janelas. Em todas as outras situações, NULL não é um valor legal e deve resultar em um código de erro E_INVALIDARG. Se o contêiner passar um valor não NULL para um objeto sem janelas, o objeto deverá renderizar o aspecto solicitado no contexto e no retângulo do dispositivo especificados. Um contêiner pode solicitar isso de um objeto sem janelas para renderizar uma segunda exibição não ativa do objeto ou imprimir o objeto.
[in] lprcWBounds
Se hdcDraw for um contexto de dispositivo de metarquivo, ponteiro para uma estrutura RECTL especificando o retângulo delimitador no metarquivo subjacente. A estrutura do retângulo contém a extensão da janela e a origem da janela. Esses valores são úteis para desenhar metarquivos. O retângulo indicado por lprcBounds está aninhado dentro deste retângulo lprcWBounds ; eles estão no mesmo espaço de coordenadas.
Se hdcDraw não for um contexto de dispositivo de metarquivo; lprcWBounds será NULL.
[in] pfnContinue
Ponteiro para uma função de retorno de chamada que o objeto de exibição deve chamar periodicamente durante uma longa operação de desenho para determinar se a operação deve continuar ou ser cancelada. Essa função retorna TRUE para continuar desenhando. Ele retorna FALSE para interromper o desenho, caso em que IViewObject::D raw retorna DRAW_E_ABORT.
dwContinue
[in] dwContinue
Valor a ser passado como um parâmetro para a função apontada pelo parâmetro pfnContinue . Normalmente, dwContinue é um ponteiro para uma estrutura definida pelo aplicativo necessária dentro da função de retorno de chamada.
Retornar valor
Esse método retorna S_OK com êxito. Outros valores retornados possíveis incluem o seguinte.
Código de retorno | Descrição |
---|---|
|
Nenhum dado a ser extraído. |
|
Operação de desenho anulada. |
|
Erro ao desenhar. |
|
Valor inválido para lindex; Atualmente, há suporte para apenas -1. |
|
Valor inválido para dwAspect. |
|
Retângulo inválido. |
Comentários
Um aplicativo de contêiner emite uma chamada para IViewObject::D raw para criar uma representação de um objeto contido. Esse método desenha a peça especificada (lindex) da exibição especificada (dwAspect e pvAspect) no contexto do dispositivo especificado (hdcDraw). Formatação, fontes e outras decisões de renderização são tomadas com base no dispositivo de destino especificado pelo parâmetro ptd.
Há uma relação entre o valor dwDrawAspect e o valor lprcbounds . O valor lprcbounds especifica o retângulo em hdcDraw no qual o desenho deve ser mapeado. Para DVASPECT_THUMBNAIL, DVASPECT_ICON e DVASPECT_SMALLICON, o objeto desenha o que quiser desenhar e mapeia-o para o espaço fornecido da melhor maneira. Alguns objetos podem ser dimensionados para caber, enquanto alguns podem ser dimensionados para ajustar, mas preservar a taxa de proporção. Além disso, alguns podem ser dimensionados para que o desenho apareça em largura total, mas a parte inferior é cortada. O contêiner pode sugerir um tamanho por meio de IOleObject::SetExtent, mas não tem controle sobre o tamanho da renderização. No caso de DVASPECT_CONTENT, a implementação IViewObject::D raw deve usar as extensões fornecidas por IOleObject::SetExtent ou usar o retângulo delimitador fornecido no parâmetro lprcBounds .
Para objetos mais recentes que dão suporte a técnicas de desenho otimizadas e para objetos sem janelas, esse método deve ser usado da seguinte maneira:
- Há suporte para novos aspectos de desenho no dwAspect , conforme definido em DVASPECT2.
- O parâmetro pvAspect pode ser usado para passar informações adicionais que permitem otimizações de desenho por meio da estrutura DVASPECTINFO .
- O método IViewObject::D raw pode ser chamado para redesenhar um objeto ativo in-loco sem janelas definindo o parâmetro lrpcBounds como NULL. Em todas as outras situações, NULL é um valor ilegal e deve resultar em um código de erro E_INVALIDARG. Um objeto sem janelas usa o retângulo passado pelo verbo de ativação ou chama IOleInPlaceObject::SetObjectRects em vez de usar esse parâmetro. Se o contêiner passar um valor não NULL para um objeto sem janelas, o objeto deverá renderizar o aspecto solicitado no contexto e no retângulo do dispositivo especificados. Um contêiner pode solicitar isso de um objeto sem janelas para renderizar uma segunda exibição não ativa do objeto ou imprimir o objeto. Consulte a interface IOleInPlaceSiteWindowless para obter mais informações sobre como desenhar objetos sem janelas.
- Para objetos sem janela, o parâmetro dwAspect permite apenas os aspectos DVASPECT_CONTENT, DVASPECT_OPAQUE e DVASPECT_TRANSPARENT.
- Para um objeto sem janelas, o parâmetro hdcDraw deve estar no modo de mapeamento MM_TEXT com suas coordenadas lógicas que correspondem às coordenadas do cliente da janela que contém. Para um objeto sem janelas, o contexto do dispositivo deve estar no mesmo estado que o normalmente passado por uma mensagem WM_PAINT.
A extensão de um objeto depende do aspecto de desenho. Para objetos não retangulares, a extensão deve ser do tamanho de um retângulo que abrange todo o aspecto. Por convenção, a origem de um objeto é o canto superior esquerdo do retângulo do aspecto DVASPECT_CONTENT. Em outras palavras, a origem sempre coincide com o canto superior esquerdo do retângulo mantido pelo site do objeto, mesmo para um objeto não retangular.
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 | oleidl.h |