Classe IViewObjectExImpl
Questa classe implementa IUnknown
e fornisce implementazioni predefinite delle interfacce IViewObject, IViewObject2 e IViewObjectEx .
Importante
Questa classe e i relativi membri non possono essere usati nelle applicazioni eseguite in Windows Runtime.
Sintassi
template<class T>
class ATL_NO_VTABLE IViewObjectExImpl
: public IViewObjectEx
Parametri
T
Classe derivata da IViewObjectExImpl
.
Membri
Metodi pubblici
Nome | Descrizione |
---|---|
IViewObjectExImpl::D raw | Disegna una rappresentazione del controllo in un contesto di dispositivo. |
IViewObjectExImpl::Freeze | Blocca la rappresentazione disegnata di un controllo in modo che non cambierà fino a quando un oggetto Unfreeze . L'implementazione ATL restituisce E_NOTIMPL. |
IViewObjectExImpl::GetAdvise | Recupera una connessione sink di avviso esistente nel controllo, se presente. |
IViewObjectExImpl::GetColorSet | Restituisce la tavolozza logica utilizzata dal controllo per il disegno. L'implementazione ATL restituisce E_NOTIMPL. |
IViewObjectExImpl::GetExtent | Recupera le dimensioni di visualizzazione del controllo in unità HIMETRIC (0,01 millimetri per unità) dal membro dati della classe di controllo CComControlBase::m_sizeExtent. |
IViewObjectExImpl::GetNaturalExtent | Fornisce hint di ridimensionamento dal contenitore per l'oggetto da usare quando l'utente lo ridimensiona. |
IViewObjectExImpl::GetRect | Restituisce un rettangolo che descrive un aspetto di disegno richiesto. L'implementazione ATL restituisce E_NOTIMPL. |
IViewObjectExImpl::GetViewStatus | Restituisce informazioni sull'opacità dell'oggetto e sugli aspetti di disegno supportati. |
IViewObjectExImpl::QueryHitPoint | Controlla se il punto specificato si trova nel rettangolo specificato e restituisce un valore HITRESULT in pHitResult . |
IViewObjectExImpl::QueryHitRect | Controlla se il rettangolo di visualizzazione del controllo si sovrappone a qualsiasi punto nel rettangolo di posizione specificato e restituisce un valore HITRESULT in pHitResult . |
IViewObjectExImpl::SetAdvise | Imposta una connessione tra il controllo e un sink di avviso in modo che il sink possa ricevere una notifica sulle modifiche nella visualizzazione del controllo. |
IViewObjectExImpl::Unfreeze | Annulla la rappresentazione disegnata del controllo. L'implementazione ATL restituisce E_NOTIMPL. |
Osservazioni:
Le interfacce IViewObject, IViewObject2 e IViewObjectEx consentono a un controllo di visualizzare direttamente se stesso e di creare e gestire un sink di avviso per notificare al contenitore le modifiche nella visualizzazione del controllo. L'interfaccia IViewObjectEx
fornisce supporto per le funzionalità di controllo estese, ad esempio il disegno senza sfarfallio, i controlli non rettangolari e trasparenti e i test di hit testing (ad esempio, la chiusura di un clic del mouse deve essere considerata sul controllo). La classe IViewObjectExImpl
fornisce un'implementazione predefinita di queste interfacce e implementa inviando informazioni al dispositivo di dump nelle compilazioni IUnknown
di debug.
Gerarchia di ereditarietà
IViewObjectEx
IViewObjectExImpl
Requisiti
Intestazione: atlctl.h
IViewObjectExImpl::D raw
Disegna una rappresentazione del controllo in un contesto di 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 */);
Osservazioni:
Questo metodo chiama CComControl::OnDrawAdvanced
il metodo che a sua volta chiama il metodo della classe di OnDraw
controllo. Un OnDraw
metodo viene aggiunto automaticamente alla classe di controllo quando si crea il controllo con la Creazione guidata controllo ATL. L'impostazione predefinita OnDraw
della procedura guidata disegna un rettangolo con l'etichetta "ATL 3.0".
Vedere IViewObject::D raw in Windows SDK.
IViewObjectExImpl::Freeze
Blocca la rappresentazione disegnata di un controllo in modo che non cambierà fino a quando un oggetto Unfreeze
. L'implementazione ATL restituisce E_NOTIMPL.
STDMETHOD(Freeze)(
DWORD /* dwAspect */,
LONG /* lindex */,
void* /* pvAspect */,
DWORD* /* pdwFreeze */);
Osservazioni:
Vedi IViewObject::Freeze in Windows SDK.
IViewObjectExImpl::GetAdvise
Recupera una connessione sink di avviso esistente nel controllo, se presente.
STDMETHOD(GetAdvise)(
DWORD* /* pAspects */,
DWORD* /* pAdvf */,
IAdviseSink** /* ppAdvSink */);
Osservazioni:
Il sink di avviso viene archiviato nel membro dati della classe di controllo CComControlBase::m_spAdviseSink.
Vedere IViewObject::GetAdvise in Windows SDK.
IViewObjectExImpl::GetColorSet
Restituisce la tavolozza logica utilizzata dal controllo per il disegno. L'implementazione ATL restituisce E_NOTIMPL.
STDMETHOD(GetColorSet)(
DWORD /* dwAspect */,
LONG /* lindex */,
void* /* pvAspect */,
DVTARGETDEVICE* /* ptd */,
HDC /* hicTargetDevice */,
LOGPALETTE** /* ppColorSet */);
Osservazioni:
Vedere IViewObject::GetColorSet in Windows SDK.
IViewObjectExImpl::GetExtent
Recupera le dimensioni di visualizzazione del controllo in unità HIMETRIC (0,01 millimetri per unità) dal membro dati della classe di controllo CComControlBase::m_sizeExtent.
STDMETHOD(GetExtent)(
DWORD /* dwDrawAspect */,
LONG /* lindex */,
DVTARGETDEVICE* /* ptd */,
LPSIZEL* lpsizel);
Osservazioni:
Vedere IViewObject2::GetExtent in Windows SDK.
IViewObjectExImpl::GetNaturalExtent
Fornisce hint di ridimensionamento dal contenitore per l'oggetto da usare quando l'utente lo ridimensiona.
STDMETHOD(GetNaturalExtent)(
DWORD dwAspect,
LONG /* lindex */,
DVTARGETDEVICE* /* ptd */,
HDC /* hicTargetDevice */,
DVEXTENTINFO* pExtentInfo,
LPSIZEL psizel);
Osservazioni:
Se dwAspect
è DVASPECT_CONTENT e pExtentInfo-dwExtentMode> è DVEXTENT_CONTENT, imposta * psizel
sul membro dati della classe di controllo CComControlBase::m_sizeNatural. In caso contrario, restituisce un errore HRESULT.
Vedere IViewObjectEx::GetNaturalExtent in Windows SDK.
IViewObjectExImpl::GetRect
Restituisce un rettangolo che descrive un aspetto di disegno richiesto. L'implementazione ATL restituisce E_NOTIMPL.
STDMETHOD(GetRect)(DWORD /* dwAspect */, LPRECTL /* pRect */);
Osservazioni:
Vedere IViewObjectEx::GetRect in Windows SDK.
IViewObjectExImpl::GetViewStatus
Restituisce informazioni sull'opacità dell'oggetto e sugli aspetti di disegno supportati.
STDMETHOD(GetViewStatus)(DWORD* pdwStatus);
Osservazioni:
Per impostazione predefinita, ATL imposta pdwStatus
per indicare che il controllo supporta VIEWSTATUS_OPAQUE (i valori possibili si trovano nell'enumerazione VIEWSTATUS ).
Vedere IViewObjectEx::GetViewStatus in Windows SDK.
IViewObjectExImpl::QueryHitPoint
Controlla se il punto specificato si trova nel rettangolo specificato e restituisce un valore HITRESULT in pHitResult
.
STDMETHOD(QueryHitPoint)(
DWORD dwAspect,
LPCRECT pRectBounds,
POINT ptlLoc,
LONG /* lCloseHit */,
DWORD* /* pHitResult */);
Osservazioni:
Il valore può essere HITRESULT_HIT o HITRESULT_OUTSIDE.
Se dwAspect
è uguale a DVASPECT_CONTENT, il metodo restituisce S_OK. In caso contrario, il metodo restituisce E_FAIL.
Vedere IViewObjectEx::QueryHitPoint in Windows SDK.
IViewObjectExImpl::QueryHitRect
Controlla se il rettangolo di visualizzazione del controllo si sovrappone a qualsiasi punto nel rettangolo di posizione specificato e restituisce un valore HITRESULT in pHitResult
.
STDMETHOD(QueryHitRect)(
DWORD dwAspect,
LPCRECT pRectBounds,
LPRECT prcLoc,
LONG /* lCloseHit */,
DWORD* /* pHitResult */);
Osservazioni:
Il valore può essere HITRESULT_HIT o HITRESULT_OUTSIDE.
Se dwAspect
è uguale a DVASPECT_CONTENT, il metodo restituisce S_OK. In caso contrario, il metodo restituisce E_FAIL.
Vedere IViewObjectEx::QueryHitRect in Windows SDK.
IViewObjectExImpl::SetAdvise
Imposta una connessione tra il controllo e un sink di avviso in modo che il sink possa ricevere una notifica sulle modifiche nella visualizzazione del controllo.
STDMETHOD(SetAdvise)(
DWORD /* aspects */,
DWORD /* advf */,
IAdviseSink* pAdvSink);
Osservazioni:
Il puntatore all'interfaccia IAdviseSink nel sink di avviso viene archiviato nel membro dati della classe di controllo CComControlBase::m_spAdviseSink.
Vedere IViewObject::SetAdvise in Windows SDK.
IViewObjectExImpl::Unfreeze
Annulla la rappresentazione disegnata del controllo. L'implementazione ATL restituisce E_NOTIMPL.
STDMETHOD(Unfreeze)(DWORD /* dwFreeze */);
Osservazioni:
Vedi IViewObject::Unfreeze in Windows SDK.
IWorkerThreadClient::CloseHandle
Implementare questo metodo per chiudere l'handle associato a questo oggetto.
HRESULT CloseHandle(HANDLE hHandle);
Parametri
hHandle
Handle da chiudere.
Valore restituito
Restituisce S_OK in caso di esito positivo o errore HRESULT in caso di errore.
Osservazioni:
L'handle passato a questo metodo è stato precedentemente associato a questo oggetto da una chiamata a CWorkerThread::AddHandle.
Esempio
Il codice seguente illustra una semplice implementazione di 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
Implementare questo metodo per eseguire il codice quando l'handle associato a questo oggetto viene segnalato.
HRESULT Execute(DWORD_PTR dwParam, HANDLE hObject);
Parametri
dwParam
Parametro utente.
hObject
Handle segnalato.
Valore restituito
Restituisce S_OK in caso di esito positivo o errore HRESULT in caso di errore.
Osservazioni:
L'handle e il puntatore DWORD passati a questo metodo sono stati precedentemente associati a questo oggetto da una chiamata a CWorkerThread::AddHandle.
Esempio
Il codice seguente illustra una semplice implementazione di 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;
}
Vedi anche
Classe CComControl
Interfacce dei controlli ActiveX
Esercitazione
Creazione di un progetto ATL
Cenni preliminari sulla classe