IViewObject::Draw
9/8/2008
Este método desenha uma representação de um objeto no contexto de dispositivo especificado.
Syntax
HRESULT Draw(
DWORD dwAspect,
LONG lindex,
void* pvAspect,
DVTARGETDEVICE* ptd,
HDC hicTargetDev,
HDC hdcDraw,
const LPRECTL lprcBounds,
const LPRECTL lprcWBounds,
BOOL (*) (DWORD) pfnContinue,
DWORD dwContinue
);
Parameters
dwAspect
[no] Especifica a proporção para ser desenhado, isto é, como o objeto é para ser representado. Representações incluem de conteúdo, um ícone, uma miniatura ou um documento impresso.Os valores válidos são extraídos de enumeração DVASPECT.
Objetos sem janelas permitem somente DVASPECT_CONTENT, DVASPECT_OPAQUE e DVASPECT_TRANSPARENT.
lIndex
[no] Parte o objeto que seja de interesse para a operação desenhar.Seu interpretação varia depending on o valor na dwAspect parâmetro. Para obter mais informações, consulte o DVASPECT enumeração.
pvAspect
[no] Ponteiro para informações adicionais em um DVASPECTINFO estrutura que permite otimizações desenho depending on o aspecto especificado.Objetos e recipientes que suporte otimizado desenho interfaces suporte recentes esse parâmetro.
Antigos objetos e recipientes que não não suporte otimizado interfaces desenho sempre especificar NULL para este parâmetro.
ptd
[no] Ponteiro para o DVTARGETDEVICE estrutura que descreve o dispositivo que o objeto deve ser processado para.Se NULL, a exibição deve ser processada para o dispositivo destino usar como padrão (geralmente a exibir).
Um valor Other Than NULL é interpretado em conjunto com hicTargetDev e hdcDraw. Por exemplo, se hdcDraw Especifica uma impressora como contexto de dispositivo, o ptd parâmetro aponta para uma estrutura descrevendo que dispositivo de impressora.
Os dados podem realmente ser impressas se hicTargetDev é um válido valor ou ele pode ser exibido no modo visualização de impressão se hicTargetDev é NULL.
hicTargetDev
[no] Contexto informações para o dispositivo destino indicado pelo ptd parâmetro do qual o objeto pode extrair dispositivo métricas e testar recursos do dispositivo.Se ptd é NULL, o objeto deve ignorar o valor na hicTargetDev parâmetro.
hdcDraw
[no] Contexto de dispositivo no qual desenhar.Para um objeto sem janelas, faça o seguinte:
- O hdcDraw parâmetro deve estar no modo de mapeamento MM_TEXT com suas coordenadas lógicas compatível coordenadas de cliente da janela que contém.
- O contexto dispositivo deve ser o mesmo estado que normalmente passado por uma mensagem WM_PAINT.
lprcBounds
[no] Ponteiro longo para um RECTL estrutura que especifica o retângulo em hdcDraw e no qual o objeto deve ser desenhado.Esse parâmetro controla o posicionamento e alongamento do objeto.
Este parâmetro deve ser NULL para desenhar um sem janelas no-objeto ativo local. 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 passa um não-NULL valor para um objeto sem janelas, o objeto deve processar o aspecto solicitado para o dispositivo especificado contexto e retângulo.
Um contêiner pode solicitação isso de um objeto sem janelas para processar uma exibição em segundo lugar, inativo do objeto ou para imprimir o objeto.
lprcWBounds
[no] Se hdcDraw é um contexto dispositivo metarquivo, este parâmetro é um ponteiro longo para um RECTL estrutura especificando o retângulo delimitador no subjacente metarquivo. A estrutura retângulo contém a extensão janela e origem janela.Esses valores são úteis para desenho metarquivos.
O retângulo indicado por lprcBounds está aninhada dentro isso lprcWBounds Retângulo; estiverem em coordenar o mesmo espaço.
Se hdcDraw não é um contexto dispositivo metarquivo; lprcWBounds será NULL.
pfnContinue
[no] Ponteiro para uma função callback que o objeto 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 desenho.
Ele retorna FALSE para parar o desenho no qual maiúsculas e minúsculas Desenhar Retorna DRAW_E_ABORT.
dwContinue
[no] Especifica um valor para transmitir como um parâmetro para a função apontada pelo pfnContinue parâmetro.Normalmente, dwContinue é um ponteiro para uma estrutura Application-defined necessária dentro de função callback.
Return Value
Este método oferece suporte a padrão retornar valores E_INVALIDARG e E_OUTOFMEMORY, bem como os valores descritos a seguinte tabela.
Valor | Descrição |
---|---|
S_OK |
O objeto foi desenhado com êxito. |
OLE_E_BLANK |
Há dados para desenhar a partir. |
DRAW_E_ABORT |
Desenhe operação anulada. |
VIEW_E_DRAW |
Erro no desenho. |
DV_E_LINDEX |
Valor inválido para lIndex; -1 atualmente somente é com suporte. |
DV_E_DVASPECT |
Valor inválido para dwAspect. |
OLE_E_INVALIDRECT |
Retângulo inválido. |
Remarks
Um aplicativo contêiner emite um chamar para Desenhar Para criar uma representação de um objeto contido. Este método desenha a (peça especificadolIndex) do (a exibição especificadadwAspect e pvAspect) no (contexto de dispositivo especificadohdcDraw).
A formatação, fontes e outras decisões processamento são feitas on the basis of o dispositivo destino especificado pelo ptd parâmetro.
Há um relacionamento entre o dwDrawAspect valor e o lprcbounds valor. O lprcbounds valor especifica o retângulo em hdcDraw no qual o desenho deve ser mapeada.
Para DVASPECT_THUMBNAIL, DVASPECT_ICON e DVASPECT_SMALLICON, o objeto desenha tudo o que ele quer desenhar e ele mapeia-lo para o espaço fornecido na melhor maneira.
Talvez alguns objetos escalabilidade para ajustá-lo Enquanto algumas podem escalabilidade para ajustá-lo, mas preservar a taxa de proporção. Além disso, algumas talvez escalabilidade para que o desenho aparecerá na largura total, mas o inferior é cortada.
O contêiner pode usar IOleObject::SetExtent Para sugerir um tamanho, mas ele não tem nenhum controle sobre o tamanho processamento. Na maiúsculas e minúsculas de DVASPECT_CONTENT, o Desenhar implementação deve usar as extensões determinadas por SetExtent ou use o retângulo delimitador fornecido na lprcBounds parâmetro.
Para manter compatibilidade com antigos objetos e recipientes que não não suporte otimizações de desenho, todos os objetos, retangular ou não, são exigido para manter uma origem e uma extensão retangular.
Isso permite que o contêiner ainda considerar todos os seu incorporado objetos como retângulos e para transmiti-los apropriado retângulos processamento em Desenhar.
Extensão de um objeto depende de como o aspecto de desenho. Para objetos não retangular, a extensão deve ser o tamanho de um retângulo cobrindo o aspecto inteiro.
Por convenção, a origem de um objeto é o parte superior esquerda canto do retângulo do aspecto DVASPECT_CONTENT.
Em outras palavras, a origem sempre coincide com o parte superior esquerda canto do retângulo mantido pelo site do objeto, mesmo para um objeto não retangular.
Para determinar se a plataforma oferece suporte a esta interface, consulte Determinando suporte COM APIs.
Observação Para chamadores
O valor de hicTargetDevice é geralmente um contexto informações de dispositivo de destino. No entanto, ele pode ser um contexto completo dispositivo.
Observação Para Implementers
Se você estiver escrevendo um manipulador objeto (such as o manipulador usar como padrão) que implementa Desenhar Executando um metarquivo, você deve tratar SetPaletteEntries metarquivo registros de uma forma especial por causa do comportamento de Windows.
A função Windows PlayMetaFile define essas entradas paleta para o primeiro plano. Você deve substituir este usar como padrão por configuração-los para a paleta segundo plano. Uso EnumMetaFile Para fazer isso. Metarquivos Avançados sempre são registrados com a paleta segundo plano portanto, não há necessidade de fazer isso manualmente.
Requirements
Header | Oleidl.h, oleidl.idl |
Library | oleaut32.lib, uuid.lib |
Windows Embedded CE | Windows CE 2.0 and later |
Windows Mobile | Windows Mobile Version 5.0 and later |
See Also
Reference
IViewObject
DVASPECT
DVASPECTINFO
DVTARGETDEVICE
IOleObject::SetExtent
Concepts
Determining Supported COM APIs