Поделиться через


Класс 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
Общие сведения о классе