IViewObjectExImpl クラス
このクラスは IUnknown
を実装し、IViewObject、IViewObject2、IViewObjectEx インターフェイスの既定の実装を提供します。
重要
このクラスとそのメンバーは、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 | 指定された点が指定された四角形内にあるかどうかを確認し、pHitResult の HITRESULT の値を返します。 |
IViewObjectExImpl::QueryHitRect | コントロールの表示四角形が、指定された位置の四角形内の任意の点と重なっているかどうかを確認し、pHitResult の HITRESULT の値を返します。 |
IViewObjectExImpl::SetAdvise | コントロールとアドバイス シンクとの間の接続を設定し、コントロールのビューの変更をシンクに通知できるようにします。 |
IViewObjectExImpl::Unfreeze | コントロールの描画された表現を固定解除します。 ATL 実装によって E_NOTIMPL が返されます。 |
解説
IViewObject、IViewObject2、IViewObjectEx インターフェイスを使用すると、コントロールを直接表示できます。また、コントロールの表示の変更をコンテナーに通知するためにアドバイス シンクを作成し、管理することもできます。 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
指定された点が指定された四角形内にあるかどうかを確認し、pHitResult
の HITRESULT の値を返します。
STDMETHOD(QueryHitPoint)(
DWORD dwAspect,
LPCRECT pRectBounds,
POINT ptlLoc,
LONG /* lCloseHit */,
DWORD* /* pHitResult */);
解説
値は、HITRESULT_HIT または HITRESULT_OUTSIDE のいずれかになります。
dwAspect
が DVASPECT_CONTENT に等しい場合、メソッドでは S_OK が返されます。 それ以外の場合、メソッドでは E_FAIL が返されます。
Windows SDK の 「IViewObjectEx::QueryHitPoint」を参照してください。
IViewObjectExImpl::QueryHitRect
コントロールの表示四角形が、指定された位置の四角形内の任意の点と重なっているかどうかを確認し、pHitResult
の HITRESULT の値を返します。
STDMETHOD(QueryHitRect)(
DWORD dwAspect,
LPCRECT pRectBounds,
LPRECT prcLoc,
LONG /* lCloseHit */,
DWORD* /* pHitResult */);
解説
値は、HITRESULT_HIT または HITRESULT_OUTSIDE のいずれかになります。
dwAspect
が DVASPECT_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 プロジェクトの作成
クラスの概要