次の方法で共有


IViewObjectExImpl クラス

このクラスは IUnknown を実装し、IViewObjectIViewObject2IViewObjectEx インターフェイスの既定の実装を提供します。

重要

このクラスとそのメンバーは、Windows ランタイムで実行するアプリケーションで使用することはできません。

構文

template<class T>
class ATL_NO_VTABLE IViewObjectExImpl
   : public IViewObjectEx

パラメーター

T
IViewObjectExImpl から派生したクラス。

メンバー

パブリック メソッド

名前 説明
IViewObjectExImpl::Draw コントロールの表現をデバイス コンテキストに描画します。
IViewObjectExImpl::Freeze コントロールの描画された表現が固定され、Unfreeze までは変更されません。 ATL 実装によって E_NOTIMPL が返されます。
IViewObjectExImpl::GetAdvise コントロール上の既存のアドバイザリ シンク接続がある場合、それを取得します。
IViewObjectExImpl::GetColorSet コントロールで描画に使用される論理パレットを返します。 ATL 実装によって E_NOTIMPL が返されます。
IViewObjectExImpl::GetExtent コントロール クラスのデータ メンバー CComControlBase::m_sizeExtent からコントロールの表示サイズを HIMETRIC 単位 (1 ユニットあたり 0.01 mm) で取得します。
IViewObjectExImpl::GetNaturalExtent オブジェクトのコンテナーから、ユーザーがオブジェクトのサイズを変更するときに使用するサイズ設定のヒントを提供します。
IViewObjectExImpl::GetRect 要求された描画アスペクトを記述する四角形を返します。 ATL 実装によって E_NOTIMPL が返されます。
IViewObjectExImpl::GetViewStatus オブジェクトの不透明度とサポートされている描画アスペクトに関する情報を返します。
IViewObjectExImpl::QueryHitPoint 指定された点が指定された四角形内にあるかどうかを確認し、pHitResultHITRESULT の値を返します。
IViewObjectExImpl::QueryHitRect コントロールの表示四角形が、指定された位置の四角形内の任意の点と重なっているかどうかを確認し、pHitResult の HITRESULT の値を返します。
IViewObjectExImpl::SetAdvise コントロールとアドバイス シンクとの間の接続を設定し、コントロールのビューの変更をシンクに通知できるようにします。
IViewObjectExImpl::Unfreeze コントロールの描画された表現を固定解除します。 ATL 実装によって E_NOTIMPL が返されます。

解説

IViewObjectIViewObject2IViewObjectEx インターフェイスを使用すると、コントロールを直接表示できます。また、コントロールの表示の変更をコンテナーに通知するためにアドバイス シンクを作成し、管理することもできます。 IViewObjectEx インターフェイスでは、ちらつきなしの描画、四角形以外のコントロールや透明のコントロール、ヒット テスト (たとえば、コントロール上でどの程度の近さをマウス クリックと見なす必要があるかなど) などの拡張コントロール機能がサポートされます。 クラス IViewObjectExImpl によって、これらのインターフェイスの既定の実装が提供され、デバッグ ビルドでダンプ デバイスに情報を送信することにより、IUnknown が実装されます。

継承階層

IViewObjectEx

IViewObjectExImpl

要件

ヘッダー: atlctl.h

IViewObjectExImpl::Draw

コントロールの表現をデバイス コンテキストに描画します。

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 メソッドが呼び出されます。 ATL コントロール ウィザードを使用してコントロールを作成すると、コントロール クラスに OnDraw メソッドが自動的に追加されます。 ウィザードの既定の OnDraw では、"ATL 3.0" というラベルの付いた四角形が描画されます。

Windows SDK の 「IViewObject::Draw」を参照してください。

IViewObjectExImpl::Freeze

コントロールの描画された表現が固定され、Unfreeze までは変更されません。 ATL 実装によって E_NOTIMPL が返されます。

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

解説

Windows SDK の 「IViewObject::Freeze」を参照してください。

IViewObjectExImpl::GetAdvise

コントロール上の既存のアドバイザリ シンク接続がある場合、それを取得します。

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

解説

アドバイザリ シンクは、コントロール クラスのデータ メンバー CComControlBase::m_spAdviseSink に格納されます。

Windows SDK の 「IViewObject::GetAdvise」を参照してください。

IViewObjectExImpl::GetColorSet

コントロールで描画に使用される論理パレットを返します。 ATL 実装によって E_NOTIMPL が返されます。

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

解説

Windows SDK の 「IViewObject::GetColorSet」を参照してください。

IViewObjectExImpl::GetExtent

コントロール クラスのデータ メンバー CComControlBase::m_sizeExtent からコントロールの表示サイズを HIMETRIC 単位 (1 ユニットあたり 0.01 mm) で取得します。

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

解説

Windows SDK の 「IViewObject2::GetExtent」を参照してください。

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 を返します。

Windows SDK の 「IViewObjectEx::GetNaturalExtent」を参照してください。

IViewObjectExImpl::GetRect

要求された描画アスペクトを記述する四角形を返します。 ATL 実装によって E_NOTIMPL が返されます。

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

解説

Windows SDK の 「IViewObjectEx::GetRect」を参照してください。

IViewObjectExImpl::GetViewStatus

オブジェクトの不透明度とサポートされている描画アスペクトに関する情報を返します。

STDMETHOD(GetViewStatus)(DWORD* pdwStatus);

解説

既定では、ATL により、pdwStatus は、コントロールで VIEWSTATUS_OPAQUE がサポートされていることを示すように設定されます (使用可能な値は、VIEWSTATUS 列挙体内にあります)。

Windows SDK の 「IViewObjectEx::GetViewStatus」を参照してください。

IViewObjectExImpl::QueryHitPoint

指定された点が指定された四角形内にあるかどうかを確認し、pHitResultHITRESULT の値を返します。

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

解説

値は、HITRESULT_HIT または HITRESULT_OUTSIDE のいずれかになります。

dwAspectDVASPECT_CONTENT に等しい場合、メソッドでは S_OK が返されます。 それ以外の場合、メソッドでは E_FAIL が返されます。

Windows SDK の 「IViewObjectEx::QueryHitPoint」を参照してください。

IViewObjectExImpl::QueryHitRect

コントロールの表示四角形が、指定された位置の四角形内の任意の点と重なっているかどうかを確認し、pHitResultHITRESULT の値を返します。

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

解説

値は、HITRESULT_HIT または HITRESULT_OUTSIDE のいずれかになります。

dwAspectDVASPECT_CONTENT に等しい場合、メソッドでは S_OK が返されます。 それ以外の場合、メソッドでは E_FAIL が返されます。

Windows SDK の 「IViewObjectEx::QueryHitRect」を参照してください。

IViewObjectExImpl::SetAdvise

コントロールとアドバイス シンクとの間の接続を設定し、コントロールのビューの変更をシンクに通知できるようにします。

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

解説

アドバイス シンクの IAdviseSink インターフェイスを指すポインターは、コントロール クラスのデータ メンバー CComControlBase::m_spAdviseSink に格納されます。

Windows SDK の 「IViewObject::SetAdvise」を参照してください。

IViewObjectExImpl::Unfreeze

コントロールの描画された表現を固定解除します。 ATL 実装によって E_NOTIMPL が返されます。

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

解説

Windows SDK の 「IViewObject::Unfreeze」を参照してください。

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 プロジェクトの作成
クラスの概要