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