IViewObjectExImpl Class

This class implements IUnknown and provides default implementations of the IViewObject, IViewObject2, and IViewObjectEx interfaces.

Important

This class and its members cannot be used in applications that execute in the Windows Runtime.

Syntax

template<class T>
class ATL_NO_VTABLE IViewObjectExImpl
   : public IViewObjectEx

Parameters

T
Your class, derived from IViewObjectExImpl.

Members

Public Methods

Name Description
IViewObjectExImpl::Draw Draws a representation of the control onto a device context.
IViewObjectExImpl::Freeze Freezes the drawn representation of a control so it won't change until an Unfreeze. The ATL implementation returns E_NOTIMPL.
IViewObjectExImpl::GetAdvise Retrieves an existing advisory sink connection on the control, if there is one.
IViewObjectExImpl::GetColorSet Returns the logical palette used by the control for drawing. The ATL implementation returns E_NOTIMPL.
IViewObjectExImpl::GetExtent Retrieves the control's display size in HIMETRIC units (0.01 millimeter per unit) from the control class data member CComControlBase::m_sizeExtent.
IViewObjectExImpl::GetNaturalExtent Provides sizing hints from the container for the object to use as the user resizes it.
IViewObjectExImpl::GetRect Returns a rectangle describing a requested drawing aspect. The ATL implementation returns E_NOTIMPL.
IViewObjectExImpl::GetViewStatus Returns information about the opacity of the object and what drawing aspects are supported.
IViewObjectExImpl::QueryHitPoint Checks if the specified point is in the specified rectangle and returns a HITRESULT value in pHitResult.
IViewObjectExImpl::QueryHitRect Checks whether the control's display rectangle overlaps any point in the specified location rectangle and returns a HITRESULT value in pHitResult.
IViewObjectExImpl::SetAdvise Sets up a connection between the control and an advise sink so the sink can be notified about changes in the control's view.
IViewObjectExImpl::Unfreeze Unfreezes the drawn representation of the control. The ATL implementation returns E_NOTIMPL.

Remarks

The IViewObject, IViewObject2, and IViewObjectEx interfaces enable a control to display itself directly, and to create and manage an advise sink to notify the container of changes in the control display. The IViewObjectEx interface provides support for extended control features such as flicker-free drawing, non-rectangular and transparent controls, and hit-testing (for example, how close a mouse click must be to be considered on the control). Class IViewObjectExImpl provides a default implementation of these interfaces and implements IUnknown by sending information to the dump device in debug builds.

Inheritance Hierarchy

IViewObjectEx

IViewObjectExImpl

Requirements

Header: atlctl.h

IViewObjectExImpl::Draw

Draws a representation of the control onto a device context.

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 */);

Remarks

This method calls CComControl::OnDrawAdvanced which in turn calls your control class's OnDraw method. An OnDraw method is automatically added to your control class when you create your control with the ATL Control Wizard. The Wizard's default OnDraw draws a rectangle with the label "ATL 3.0".

See IViewObject::Draw in the Windows SDK.

IViewObjectExImpl::Freeze

Freezes the drawn representation of a control so it won't change until an Unfreeze. The ATL implementation returns E_NOTIMPL.

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

Remarks

See IViewObject::Freeze in the Windows SDK.

IViewObjectExImpl::GetAdvise

Retrieves an existing advisory sink connection on the control, if there is one.

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

Remarks

The advisory sink is stored in the control class data member CComControlBase::m_spAdviseSink.

See IViewObject::GetAdvise in the Windows SDK.

IViewObjectExImpl::GetColorSet

Returns the logical palette used by the control for drawing. The ATL implementation returns E_NOTIMPL.

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

Remarks

See IViewObject::GetColorSet in the Windows SDK.

IViewObjectExImpl::GetExtent

Retrieves the control's display size in HIMETRIC units (0.01 millimeter per unit) from the control class data member CComControlBase::m_sizeExtent.

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

Remarks

See IViewObject2::GetExtent in the Windows SDK.

IViewObjectExImpl::GetNaturalExtent

Provides sizing hints from the container for the object to use as the user resizes it.

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

Remarks

If dwAspect is DVASPECT_CONTENT and pExtentInfo->dwExtentMode is DVEXTENT_CONTENT, sets * psizel to the control class's data member CComControlBase::m_sizeNatural. Otherwise, returns an error HRESULT.

See IViewObjectEx::GetNaturalExtent in the Windows SDK.

IViewObjectExImpl::GetRect

Returns a rectangle describing a requested drawing aspect. The ATL implementation returns E_NOTIMPL.

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

Remarks

See IViewObjectEx::GetRect in the Windows SDK.

IViewObjectExImpl::GetViewStatus

Returns information about the opacity of the object and what drawing aspects are supported.

STDMETHOD(GetViewStatus)(DWORD* pdwStatus);

Remarks

By default, ATL sets pdwStatus to indicate that the control supports VIEWSTATUS_OPAQUE (possible values are in the VIEWSTATUS enumeration).

See IViewObjectEx::GetViewStatus in the Windows SDK.

IViewObjectExImpl::QueryHitPoint

Checks if the specified point is in the specified rectangle and returns a HITRESULT value in pHitResult.

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

Remarks

The value can be either HITRESULT_HIT or HITRESULT_OUTSIDE.

If dwAspect equals DVASPECT_CONTENT, the method returns S_OK. Otherwise, the method returns E_FAIL.

See IViewObjectEx::QueryHitPoint in the Windows SDK.

IViewObjectExImpl::QueryHitRect

Checks whether the control's display rectangle overlaps any point in the specified location rectangle and returns a HITRESULT value in pHitResult.

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

Remarks

The value can be either HITRESULT_HIT or HITRESULT_OUTSIDE.

If dwAspect equals DVASPECT_CONTENT, the method returns S_OK. Otherwise, the method returns E_FAIL.

See IViewObjectEx::QueryHitRect in the Windows SDK.

IViewObjectExImpl::SetAdvise

Sets up a connection between the control and an advise sink so the sink can be notified about changes in the control's view.

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

Remarks

The pointer to the IAdviseSink interface on the advise sink is stored in the control class data member CComControlBase::m_spAdviseSink.

See IViewObject::SetAdvise in the Windows SDK.

IViewObjectExImpl::Unfreeze

Unfreezes the drawn representation of the control. The ATL implementation returns E_NOTIMPL.

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

Remarks

See IViewObject::Unfreeze in the Windows SDK.

IWorkerThreadClient::CloseHandle

Implement this method to close the handle associated with this object.

HRESULT CloseHandle(HANDLE hHandle);

Parameters

hHandle
The handle to be closed.

Return Value

Return S_OK on success, or an error HRESULT on failure.

Remarks

The handle passed to this method was previously associated with this object by a call to CWorkerThread::AddHandle.

Example

The following code shows a simple implementation of 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

Implement this method to execute code when the handle associated with this object becomes signaled.

HRESULT Execute(DWORD_PTR dwParam, HANDLE hObject);

Parameters

dwParam
The user parameter.

hObject
The handle that has become signaled.

Return Value

Return S_OK on success, or an error HRESULT on failure.

Remarks

The handle and DWORD/pointer passed to this method were previously associated with this object by a call to CWorkerThread::AddHandle.

Example

The following code shows a simple implementation of 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;
}

See also

CComControl Class
ActiveX Controls Interfaces
Tutorial
Creating an ATL Project
Class Overview