Partilhar via


IViewObjectExImpl Classe

Observação

A Active Template Library (ATL) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.

Esta classe implementa IUnknown e fornece implementações padrão das interfaces IViewObject, IViewObject2 e IViewObjectEx .

Importante

Essa classe e seus membros não podem ser usados em aplicativos executados no Tempo de Execução do Windows.

Sintaxe

template<class T>
class ATL_NO_VTABLE IViewObjectExImpl
   : public IViewObjectEx

Parâmetros

T
A sua classe, derivada de IViewObjectExImpl.

Membros

Métodos Públicos

Nome Description
IViewObjectExImpl::D raw Desenha uma representação do controlo no contexto de um dispositivo.
IViewObjectExImpl::Freeze Congela a representação desenhada de um controlo para que não mude até que um Unfreeze. A implementação do ATL devolve E_NOTIMPL.
IViewObjectExImpl::GetAdvise Recupera uma ligação de afundamento de aviso existente no controlo, se existir.
IViewObjectExImpl::GetColorSet Devolve a paleta lógica usada pelo controlo para desenhar. A implementação do ATL devolve E_NOTIMPL.
IViewObjectExImpl::GetExtent Recupera o tamanho do ecrã do controlo em unidades HIMÉTRICAS (0,01 milímetros por unidade) do membro de dados da classe de controlo CComControlBase::m_sizeExtent.
IViewObjectExImpl::ObtendoExtensãoNaturalT Fornece dicas de dimensionamento a partir do contentor para o objeto usar enquanto o utilizador o redimensiona.
IViewObjectExImpl::GetRect Devolve um retângulo que descreve um aspeto de desenho solicitado. A implementação do ATL devolve E_NOTIMPL.
IViewObjectExImpl::GetViewStatus Devolve informação sobre a opacidade do objeto e quais os aspetos de desenho suportados.
IViewObjectExImpl::QueryHitPoint Verifica se o ponto especificado está no retângulo especificado e devolve um valor HITRESULT em pHitResult.
IViewObjectExImpl::QueryHitRect Verifica se o retângulo do ecrã do controlo se sobrepõe a qualquer ponto do retângulo de localização especificado e devolve um valor HITRESULT em pHitResult.
IViewObjectExImpl::SetAdvise Estabelece uma ligação entre o controlo e um lavatório de aviso para que o pino possa ser notificado sobre alterações na visão do controlo.
IViewObjectExImpl::Descongelar Descongela a representação desenhada do controlo. A implementação do ATL devolve E_NOTIMPL.

Observações

As interfaces IViewObject, IViewObject2 e IViewObjectEx permitem que um controlo se apresente diretamente e crie e gere um sumidouro de aconselhamento para notificar o contentor sobre alterações no ecrã de controlo. A IViewObjectEx interface oferece suporte para funcionalidades de controlo estendidas, como desenho sem cintilação, controlos não retangulares e transparentes, e testes de acerto (por exemplo, quão próximo deve estar um clique do rato para ser considerado no controlo). Class IViewObjectExImpl fornece uma implementação padrão destas interfaces e implementa IUnknown enviando informação para o dispositivo de despejo em builds de depuração.

Hierarquia de herança

IViewObjectEx

IViewObjectExImpl

Requerimentos

Cabeçalho: atlctl.h

IViewObjectExImpl::D raw

Desenha uma representação do controlo no contexto de um dispositivo.

STDMETHOD(Draw)(
    DWORD dwDrawAspect,
    LONG lindex,
    void* pvAspect,
    DVTARGETDEVICE* ptd,
    HDC hicTargetDev,
    LPCRECTL prcBounds,
    LPCRECTL prcWBounds,
    BOOL(_stdcall* /* pfnContinue*/) (DWORD_PTR dwContinue),
    DWORD_PTR /* dwContinue */);

Observações

Este método chama CComControl::OnDrawAdvanced que, por sua vez, chama o método da OnDraw sua classe de controlo. Um OnDraw método é automaticamente adicionado à sua classe de controlo quando cria o seu controlo com o ATL Control Wizard. O padrão OnDraw do Wizard desenha um retângulo com o rótulo "ATL 3.0".

Veja IViewObject::D raw no SDK do Windows.

IViewObjectExImpl::Freeze

Congela a representação desenhada de um controlo para que não mude até que um Unfreeze. A implementação do ATL devolve E_NOTIMPL.

STDMETHOD(Freeze)(
    DWORD /* dwAspect */,
    LONG /* lindex */,
    void* /* pvAspect */,
    DWORD* /* pdwFreeze */);

Observações

Veja IViewObject::Freeze no SDK do Windows.

IViewObjectExImpl::GetAdvise

Recupera uma ligação de afundamento de aviso existente no controlo, se existir.

STDMETHOD(GetAdvise)(
    DWORD* /* pAspects */,
    DWORD* /* pAdvf */,
    IAdviseSink** /* ppAdvSink */);

Observações

O sumidouro de aviso é armazenado no membro de dados da classe de controlo CComControlBase::m_spAdviseSink.

Veja IViewObject::GetAdvise no SDK do Windows.

IViewObjectExImpl::GetColorSet

Devolve a paleta lógica usada pelo controlo para desenhar. A implementação do ATL devolve E_NOTIMPL.

STDMETHOD(GetColorSet)(
    DWORD /* dwAspect */,
    LONG /* lindex */,
    void* /* pvAspect */,
    DVTARGETDEVICE* /* ptd */,
    HDC /* hicTargetDevice */,
    LOGPALETTE** /* ppColorSet */);

Observações

Veja IViewObject::GetColorSet no SDK do Windows.

IViewObjectExImpl::GetExtent

Recupera o tamanho do ecrã do controlo em unidades HIMÉTRICAS (0,01 milímetros por unidade) do membro de dados da classe de controlo CComControlBase::m_sizeExtent.

STDMETHOD(GetExtent)(
    DWORD /* dwDrawAspect */,
    LONG /* lindex */,
    DVTARGETDEVICE* /* ptd */,
    LPSIZEL* lpsizel);

Observações

Veja IViewObject2::GetExtent no SDK do Windows.

IViewObjectExImpl::ObtendoExtensãoNaturalT

Fornece dicas de dimensionamento a partir do contentor para o objeto usar enquanto o utilizador o redimensiona.

STDMETHOD(GetNaturalExtent)(
    DWORD dwAspect,
    LONG /* lindex */,
    DVTARGETDEVICE* /* ptd */,
    HDC /* hicTargetDevice */,
    DVEXTENTINFO* pExtentInfo,
    LPSIZEL psizel);

Observações

Se dwAspect for DVASPECT_CONTENT e pExtentInfo-dwExtentMode> for DVEXTENT_CONTENT, define * psizel para o membro de dados da classe de controlo CComControlBase::m_sizeNatural. Caso contrário, devolve um erro HRESULT.

Veja IViewObjectEx::GetNaturalExtent no SDK do Windows.

IViewObjectExImpl::GetRect

Devolve um retângulo que descreve um aspeto de desenho solicitado. A implementação do ATL devolve E_NOTIMPL.

STDMETHOD(GetRect)(DWORD /* dwAspect */, LPRECTL /* pRect */);

Observações

Veja IViewObjectEx::GetRect no SDK do Windows.

IViewObjectExImpl::GetViewStatus

Devolve informação sobre a opacidade do objeto e quais os aspetos de desenho suportados.

STDMETHOD(GetViewStatus)(DWORD* pdwStatus);

Observações

Por defeito, o ATL define pdwStatus para indicar que o controlo suporta VIEWSTATUS_OPAQUE (os valores possíveis estão na enumeração VIEWSTATUS ).

Veja IViewObjectEx::GetViewStatus no SDK do Windows.

IViewObjectExImpl::QueryHitPoint

Verifica se o ponto especificado está no retângulo especificado e devolve um valor HITRESULT em pHitResult.

STDMETHOD(QueryHitPoint)(
    DWORD dwAspect,
    LPCRECT pRectBounds,
    POINT ptlLoc,
    LONG /* lCloseHit */,
    DWORD* /* pHitResult */);

Observações

O valor pode ser HITRESULT_HIT ou HITRESULT_OUTSIDE.

Se dwAspect for igual a DVASPECT_CONTENT, o método devolve S_OK. Caso contrário, o método devolve E_FAIL.

Veja IViewObjectEx::QueryHitPoint no SDK do Windows.

IViewObjectExImpl::QueryHitRect

Verifica se o retângulo do ecrã do controlo se sobrepõe a qualquer ponto do retângulo de localização especificado e devolve um valor HITRESULT em pHitResult.

STDMETHOD(QueryHitRect)(
    DWORD dwAspect,
    LPCRECT pRectBounds,
    LPRECT prcLoc,
    LONG /* lCloseHit */,
    DWORD* /* pHitResult */);

Observações

O valor pode ser HITRESULT_HIT ou HITRESULT_OUTSIDE.

Se dwAspect for igual a DVASPECT_CONTENT, o método devolve S_OK. Caso contrário, o método devolve E_FAIL.

Veja IViewObjectEx::QueryHitRect no SDK do Windows.

IViewObjectExImpl::SetAdvise

Estabelece uma ligação entre o controlo e um lavatório de aviso para que o pino possa ser notificado sobre alterações na visão do controlo.

STDMETHOD(SetAdvise)(
    DWORD /* aspects */,
    DWORD /* advf */,
    IAdviseSink* pAdvSink);

Observações

O ponteiro para a interface IAdviseSink no sumidouro de aconselhamento é armazenado no membro de dados da classe de controlo CComControlBase::m_spAdviseSink.

Veja IViewObject::SetAdvise no SDK do Windows.

IViewObjectExImpl::Descongelar

Descongela a representação desenhada do controlo. A implementação do ATL devolve E_NOTIMPL.

STDMETHOD(Unfreeze)(DWORD /* dwFreeze */);

Observações

Veja IViewObject::Unfreeze no SDK do Windows.

IWorkerThreadClient::CloseHandle

Implemente este método para fechar a alavanca associada a este objeto.

HRESULT CloseHandle(HANDLE hHandle);

Parâmetros

hHandle
A maçaneta deve ser fechada.

Valor de retorno

Devolva S_OK em caso de sucesso, ou um erro HRESULT em caso de falha.

Observações

O handle passado para este método estava anteriormente associado a este objeto através de uma chamada para CWorkerThread::AddHandle.

Example

O código seguinte mostra uma implementação simples de IWorkerThreadClient::CloseHandle.

HRESULT CloseHandle(HANDLE hObject)
{
   // Users should do any shutdown operation required here.
   // Generally, this means just closing the handle.

   if (!::CloseHandle(hObject))
   {
      // Closing the handle failed for some reason.
      return AtlHresultFromLastError();
   }

   return S_OK;
}

IWorkerThreadClient::Execute

Implemente este método para executar código quando o handle associado a este objeto for sinalizado.

HRESULT Execute(DWORD_PTR dwParam, HANDLE hObject);

Parâmetros

dwParam
O parâmetro do utilizador.

hObjeto
O nome que se tornou sinalizado.

Valor de retorno

Devolva S_OK em caso de sucesso, ou um erro HRESULT em caso de falha.

Observações

O handle e o DWORD/pointer passados para este método estavam anteriormente associados a este objeto através de uma chamada para CWorkerThread::AddHandle.

Example

O código seguinte mostra uma implementação simples de IWorkerThreadClient::Execute.

HRESULT Execute(DWORD_PTR dwParam, HANDLE hObject)
{
   // Cast the parameter to its known type.
   LONG* pn = reinterpret_cast<LONG*>(dwParam);

   // Increment the LONG.
   LONG n = InterlockedIncrement(pn);

   // Log the results.
   printf_s("Handle 0x%08X incremented value to : %d\n", (DWORD_PTR)hObject, n);

   return S_OK;
}

Consulte também

Classe CComControl
Interfaces de Controlo ActiveX
Tutorial
Criando um projeto ATL
Visão geral da classe