Classe IViewObjectExImpl

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

Importante

Essa classe e os respectivos membros não podem ser usados em aplicativos executados no Windows Runtime.

Sintaxe

template<class T>
class ATL_NO_VTABLE IViewObjectExImpl
   : public IViewObjectEx

Parâmetros

T
Sua classe, derivada de IViewObjectExImpl.

Membros

Métodos públicos

Nome Descrição
IViewObjectExImpl::Draw Desenha uma representação do controle em um contexto de dispositivo.
IViewObjectExImpl::Freeze Congela a representação desenhada de um controle para que ele não mude até um Unfreeze. A implementação da ATL retorna E_NOTIMPL.
IViewObjectExImpl::GetAdvise Recupera uma conexão do coletor de aviso existente no controle, se houver uma.
IViewObjectExImpl::GetColorSet Retorna a paleta lógica usada pelo controle para desenho. A implementação da ATL retorna E_NOTIMPL.
IViewObjectExImpl::GetExtent Recupera o tamanho de exibição do controle em unidades HIMETRIC (0,01 milímetros por unidade) do membro de dados da classe de controle CComControlBase::m_sizeExtent.
IViewObjectExImpl::GetNaturalExtent Fornece dicas de dimensionamento do contêiner para o objeto usar enquanto o usuário o redimensiona.
IViewObjectExImpl::GetRect Retorna um retângulo que descreve um aspecto de desenho solicitado. A implementação da ATL retorna E_NOTIMPL.
IViewObjectExImpl::GetViewStatus Retorna informações sobre a opacidade do objeto e quais aspectos de desenho têm suporte.
IViewObjectExImpl::QueryHitPoint Verifica se o ponto especificado está no retângulo especificado e retorna um valor HITRESULT em pHitResult.
IViewObjectExImpl::QueryHitRect Verifica se o retângulo de exibição do controle se sobrepõe a algum ponto no retângulo de local especificado e retorna um valor HITRESULT em pHitResult.
IViewObjectExImpl::SetAdvise Configura uma conexão entre o controle e um coletor de aviso para que o coletor possa ser notificado sobre as alterações no modo de exibição do controle.
IViewObjectExImpl::Unfreeze Descongela a representação desenhada do controle. A implementação da ATL retorna E_NOTIMPL.

Comentários

As interfaces IViewObject, IViewObject2 e IViewObjectEx permitem que um controle se exiba diretamente e crie e gerencie um coletor de aviso para notificar o contêiner de alterações na exibição de controle. A interface IViewObjectEx fornece suporte para recursos de controle estendidos, como desenho sem cintilação, controles não retangulares e transparentes e teste de clique (por exemplo, o quão perto um clique do mouse deve estar para ser considerado no controle). A classe IViewObjectExImpl fornece uma implementação padrão dessas interfaces e implementa IUnknown enviando informações para o dispositivo de despejo em builds de depuração.

Hierarquia de herança

IViewObjectEx

IViewObjectExImpl

Requisitos

Cabeçalho: atlctl.h

IViewObjectExImpl::Draw

Desenha uma representação do controle em um contexto de 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 */);

Comentários

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

Confira IViewObject::Draw no SDK do Windows.

IViewObjectExImpl::Freeze

Congela a representação desenhada de um controle para que ele não mude até um Unfreeze. A implementação da ATL retorna E_NOTIMPL.

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

Comentários

Confira IViewObject::Freeze no SDK do Windows.

IViewObjectExImpl::GetAdvise

Recupera uma conexão do coletor de aviso existente no controle, se houver uma.

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

Comentários

O coletor de consultoria é armazenado no membro de dados da classe de controle CComControlBase::m_spAdviseSink.

Confira IViewObject::GetAdvise no SDK do Windows.

IViewObjectExImpl::GetColorSet

Retorna a paleta lógica usada pelo controle para desenho. A implementação da ATL retorna E_NOTIMPL.

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

Comentários

Confira IViewObject::GetColorSet no SDK do Windows.

IViewObjectExImpl::GetExtent

Recupera o tamanho de exibição do controle em unidades HIMETRIC (0,01 milímetros por unidade) do membro de dados da classe de controle CComControlBase::m_sizeExtent.

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

Comentários

Confira IViewObject2::GetExtent no SDK do Windows.

IViewObjectExImpl::GetNaturalExtent

Fornece dicas de dimensionamento do contêiner para o objeto usar enquanto o usuário o redimensiona.

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

Comentários

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

Confira IViewObjectEx::GetNaturalExtent no SDK do Windows.

IViewObjectExImpl::GetRect

Retorna um retângulo que descreve um aspecto de desenho solicitado. A implementação da ATL retorna E_NOTIMPL.

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

Comentários

Confira IViewObjectEx::GetRect no SDK do Windows.

IViewObjectExImpl::GetViewStatus

Retorna informações sobre a opacidade do objeto e quais aspectos de desenho têm suporte.

STDMETHOD(GetViewStatus)(DWORD* pdwStatus);

Comentários

Por padrão, a ATL define pdwStatus para indicar que o controle dá suporte a VIEWSTATUS_OPAQUE (os valores possíveis estão na enumeração VIEWSTATUS).

Confira IViewObjectEx::GetViewStatus no SDK do Windows.

IViewObjectExImpl::QueryHitPoint

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

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

Comentários

O valor pode ser HITRESULT_HIT ou HITRESULT_OUTSIDE.

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

Confira IViewObjectEx::QueryHitPoint no SDK do Windows.

IViewObjectExImpl::QueryHitRect

Verifica se o retângulo de exibição do controle se sobrepõe a algum ponto no retângulo de local especificado e retorna um valor HITRESULT em pHitResult.

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

Comentários

O valor pode ser HITRESULT_HIT ou HITRESULT_OUTSIDE.

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

Confira IViewObjectEx::QueryHitRect no SDK do Windows.

IViewObjectExImpl::SetAdvise

Configura uma conexão entre o controle e um coletor de aviso para que o coletor possa ser notificado sobre as alterações no modo de exibição do controle.

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

Comentários

O ponteiro para a interface IAdviseSink no coletor de aviso é armazenado no membro de dados da classe de controle CComControlBase::m_spAdviseSink.

Confira IViewObject::SetAdvise no SDK do Windows.

IViewObjectExImpl::Unfreeze

Descongela a representação desenhada do controle. A implementação da ATL retorna E_NOTIMPL.

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

Comentários

Confira IViewObject::Unfreeze no SDK do Windows.

IWorkerThreadClient::CloseHandle

Implemente esse método para fechar o identificador associado a esse objeto.

HRESULT CloseHandle(HANDLE hHandle);

Parâmetros

hHandle
O identificador a ser fechado.

Valor de retorno

Retorna S_OK se houver êxito ou um erro HRESULT, em caso de falha.

Comentários

O identificador passado para esse método foi anteriormente associado a esse objeto por uma chamada à CWorkerThread::AddHandle.

Exemplo

O seguinte código mostra uma implementação simples do 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 esse método para executar o código quando o identificador associado a esse objeto ficar sinalizado.

HRESULT Execute(DWORD_PTR dwParam, HANDLE hObject);

Parâmetros

dwParam
O parâmetro do usuário.

hObject
O identificador que ficou sinalizado.

Valor de retorno

Retorna S_OK se houver êxito ou um erro HRESULT, em caso de falha.

Comentários

O identificador e o dword/ponteiro passados para esse método foram anteriormente associados a esse objeto por uma chamada à CWorkerThread::AddHandle.

Exemplo

O seguinte código mostra uma implementação simples do 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;
}

Confira também

Classe CComControl
Interfaces de controles ActiveX
Tutorial
Criando um projeto ATL
Visão geral da aula