Класс IViewObjectExImpl
Этот класс реализует IUnknown
и предоставляет реализации интерфейсов IViewObject, IViewObject2 и IViewObjectEx по умолчанию.
Внимание
Этот класс и его члены нельзя использовать в приложениях, выполняемых в среде выполнения Windows.
Синтаксис
template<class T>
class ATL_NO_VTABLE IViewObjectExImpl
: public IViewObjectEx
Параметры
T
Класс, производный от IViewObjectExImpl
.
Участники
Открытые методы
Имя | Описание |
---|---|
IViewObjectExImpl::D raw | Рисует представление элемента управления в контексте устройства. |
IViewObjectExImpl::Freeze | Замораживает рисованное представление элемента управления, чтобы оно не изменялось до тех пор, пока Unfreeze не будет. Реализация ATL возвращает E_NOTIMPL. |
IViewObjectExImpl::GetAdvise | Извлекает существующее подключение приемника рекомендаций в элементе управления, если он есть. |
IViewObjectExImpl::GetColorSet | Возвращает логическую палитру, используемую элементом управления для рисования. Реализация ATL возвращает E_NOTIMPL. |
IViewObjectExImpl::GetExtent | Извлекает размер отображения элемента управления в единицах HIMETRIC (0,01 миллиметра на единицу) из элемента данных класса управления CComControlBase::m_sizeExtent. |
IViewObjectExImpl::GetNaturalExtent | Предоставляет подсказки по размеру из контейнера для объекта, используемого в качестве изменения размера пользователя. |
IViewObjectExImpl::GetRect | Возвращает прямоугольник, описывающий запрошенный аспект рисования. Реализация ATL возвращает E_NOTIMPL. |
IViewObjectExImpl::GetViewStatus | Возвращает сведения о непрозрачности объекта и поддерживаемых аспектах рисования. |
IViewObjectExImpl::QueryHitPoint | Проверяет, находится ли указанная точка в указанном прямоугольнике и возвращает значение HITRESULT в pHitResult . |
IViewObjectExImpl::QueryHitRect | Проверяет, перекрывает ли прямоугольник отображения элемента управления любую точку в заданном прямоугольнике расположения и возвращает значение HITRESULT в pHitResult . |
IViewObjectExImpl::SetAdvise | Настраивает соединение между элементом управления и приемником рекомендаций, чтобы приемник можно было получать уведомления об изменениях в представлении элемента управления. |
IViewObjectExImpl::Unfreeze | Отменяет рисованное представление элемента управления. Реализация ATL возвращает E_NOTIMPL. |
Замечания
Интерфейсы IViewObject, IViewObject2 и IViewObjectEx позволяют элементу управления отображаться непосредственно, а также создавать приемник рекомендаций для уведомления контейнера изменений в дисплее элемента управления и управлять ими. Интерфейс IViewObjectEx
обеспечивает поддержку расширенных функций управления, таких как свободное рисование, не прямоугольные и прозрачные элементы управления, а также тестирование попаданий (например, как закрыть щелчк мыши необходимо учитывать в элементе управления). Класс IViewObjectExImpl
предоставляет реализацию этих интерфейсов по умолчанию и реализует путем IUnknown
отправки сведений на устройство дампа в отладочных сборках.
Иерархия наследования
IViewObjectEx
IViewObjectExImpl
Требования
Header: atlctl.h
IViewObjectExImpl::D raw
Рисует представление элемента управления в контексте устройства.
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 */);
Замечания
Этот метод вызывает CComControl::OnDrawAdvanced
метод, который, в свою очередь, вызывает метод класса OnDraw
элемента управления. Метод OnDraw
автоматически добавляется в класс управления при создании элемента управления с помощью мастера управления ATL. По умолчанию OnDraw
мастер рисует прямоугольник с меткой ATL 3.0.
См . раздел IViewObject::D raw в пакете SDK для Windows.
IViewObjectExImpl::Freeze
Замораживает рисованное представление элемента управления, чтобы оно не изменялось до тех пор, пока Unfreeze
не будет. Реализация ATL возвращает E_NOTIMPL.
STDMETHOD(Freeze)(
DWORD /* dwAspect */,
LONG /* lindex */,
void* /* pvAspect */,
DWORD* /* pdwFreeze */);
Замечания
См. раздел IViewObject::Freeze в пакете SDK для Windows.
IViewObjectExImpl::GetAdvise
Извлекает существующее подключение приемника рекомендаций в элементе управления, если он есть.
STDMETHOD(GetAdvise)(
DWORD* /* pAspects */,
DWORD* /* pAdvf */,
IAdviseSink** /* ppAdvSink */);
Замечания
Приемник рекомендаций хранится в элементе данных класса управления CComControlBase::m_spAdviseSink.
См . раздел IViewObject::GetAdvise в пакете SDK для Windows.
IViewObjectExImpl::GetColorSet
Возвращает логическую палитру, используемую элементом управления для рисования. Реализация ATL возвращает E_NOTIMPL.
STDMETHOD(GetColorSet)(
DWORD /* dwAspect */,
LONG /* lindex */,
void* /* pvAspect */,
DVTARGETDEVICE* /* ptd */,
HDC /* hicTargetDevice */,
LOGPALETTE** /* ppColorSet */);
Замечания
См. раздел IViewObject::GetColorSet в пакете SDK для Windows.
IViewObjectExImpl::GetExtent
Извлекает размер отображения элемента управления в единицах HIMETRIC (0,01 миллиметра на единицу) из элемента данных класса управления CComControlBase::m_sizeExtent.
STDMETHOD(GetExtent)(
DWORD /* dwDrawAspect */,
LONG /* lindex */,
DVTARGETDEVICE* /* ptd */,
LPSIZEL* lpsizel);
Замечания
См. раздел IViewObject2::GetExtent в пакете SDK для Windows.
IViewObjectExImpl::GetNaturalExtent
Предоставляет подсказки по размеру из контейнера для объекта, используемого в качестве изменения размера пользователя.
STDMETHOD(GetNaturalExtent)(
DWORD dwAspect,
LONG /* lindex */,
DVTARGETDEVICE* /* ptd */,
HDC /* hicTargetDevice */,
DVEXTENTINFO* pExtentInfo,
LPSIZEL psizel);
Замечания
Если dwAspect
DVASPECT_CONTENT и pExtentInfo-dwExtentMode> DVEXTENT_CONTENT, задает * psizel
для элемента данных класса управления CComControlBase::m_sizeNatural. В противном случае возвращает ошибку HRESULT.
См. раздел IViewObjectEx::GetNaturalExtent в пакете SDK для Windows.
IViewObjectExImpl::GetRect
Возвращает прямоугольник, описывающий запрошенный аспект рисования. Реализация ATL возвращает E_NOTIMPL.
STDMETHOD(GetRect)(DWORD /* dwAspect */, LPRECTL /* pRect */);
Замечания
См. раздел IViewObjectEx::GetRect в пакете SDK для Windows.
IViewObjectExImpl::GetViewStatus
Возвращает сведения о непрозрачности объекта и поддерживаемых аспектах рисования.
STDMETHOD(GetViewStatus)(DWORD* pdwStatus);
Замечания
По умолчанию наборы pdwStatus
ATL указывают на то, что элемент управления поддерживает VIEWSTATUS_OPAQUE (возможные значения находятся в перечислении VIEWSTATUS ).
См. раздел IViewObjectEx::GetViewStatus в пакете SDK для Windows.
IViewObjectExImpl::QueryHitPoint
Проверяет, находится ли указанная точка в указанном прямоугольнике и возвращает значение HITRESULT в pHitResult
.
STDMETHOD(QueryHitPoint)(
DWORD dwAspect,
LPCRECT pRectBounds,
POINT ptlLoc,
LONG /* lCloseHit */,
DWORD* /* pHitResult */);
Замечания
Это значение может быть либо HITRESULT_HIT, либо HITRESULT_OUTSIDE.
Если dwAspect
значение равно DVASPECT_CONTENT, метод возвращает S_OK. В противном случае метод возвращает E_FAIL.
См. раздел IViewObjectEx::QueryHitPoint в пакете SDK для Windows.
IViewObjectExImpl::QueryHitRect
Проверяет, перекрывает ли прямоугольник отображения элемента управления любую точку в заданном прямоугольнике расположения и возвращает значение HITRESULT в pHitResult
.
STDMETHOD(QueryHitRect)(
DWORD dwAspect,
LPCRECT pRectBounds,
LPRECT prcLoc,
LONG /* lCloseHit */,
DWORD* /* pHitResult */);
Замечания
Это значение может быть либо HITRESULT_HIT, либо HITRESULT_OUTSIDE.
Если dwAspect
значение равно DVASPECT_CONTENT, метод возвращает S_OK. В противном случае метод возвращает E_FAIL.
См. раздел IViewObjectEx::QueryHitRect в пакете SDK для Windows.
IViewObjectExImpl::SetAdvise
Настраивает соединение между элементом управления и приемником рекомендаций, чтобы приемник можно было получать уведомления об изменениях в представлении элемента управления.
STDMETHOD(SetAdvise)(
DWORD /* aspects */,
DWORD /* advf */,
IAdviseSink* pAdvSink);
Замечания
Указатель на интерфейс IAdviseSink в приемнике советов хранится в элементе данных класса управления CComControlBase::m_spAdviseSink.
См . раздел IViewObject::SetAdvise в пакете SDK для Windows.
IViewObjectExImpl::Unfreeze
Отменяет рисованное представление элемента управления. Реализация ATL возвращает E_NOTIMPL.
STDMETHOD(Unfreeze)(DWORD /* dwFreeze */);
Замечания
См. раздел IViewObject::Unfreeze в пакете SDK для Windows.
IWorkerThreadClient::CloseHandle
Реализуйте этот метод, чтобы закрыть дескриптор, связанный с этим объектом.
HRESULT CloseHandle(HANDLE hHandle);
Параметры
hHandle
Дескриптор, который должен быть закрыт.
Возвращаемое значение
Возвращает S_OK при успешном выполнении или ошибке HRESULT при сбое.
Замечания
Дескриптор, переданный этому методу, ранее был связан с этим объектом вызовом CWorkerThread::AddHandle.
Пример
В следующем коде показана простая реализация 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
Реализуйте этот метод для выполнения кода, когда дескриптор, связанный с этим объектом, становится сигналом.
HRESULT Execute(DWORD_PTR dwParam, HANDLE hObject);
Параметры
dwParam
Параметр пользователя.
hObject
Дескриптор, который стал сигналом.
Возвращаемое значение
Возвращает S_OK при успешном выполнении или ошибке HRESULT при сбое.
Замечания
Дескриптор и указатель DWORD/, переданные этому методу, ранее были связаны с этим объектом вызовом CWorkerThread::AddHandle.
Пример
В следующем коде показана простая реализация 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;
}
См. также
Класс CComControl
Интерфейсы элементов управления ActiveX
Руководство
Создание проекта ATL
Общие сведения о классе