共用方式為


IViewObjectExImpl 類別

這個類別會實作IUnknown並提供 IViewObjectIViewObject2IViewObjectEx 介面的預設實作。

重要

這個類別及其成員不能用於在 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 從控件類別數據成員 CComControlBase::m_sizeExtent擷取控件的顯示大小,以 HIMETRIC 單位為單位(每單位 0.01 公厘)。
IViewObjectExImpl::GetNaturalExtent 提供容器的大小提示,讓對象在用戶調整大小時使用。
IViewObjectExImpl::GetRect 傳回描述所要求繪圖層面的矩形。 ATL 實作會傳回E_NOTIMPL。
IViewObjectExImpl::GetViewStatus 傳回物件不透明度的相關信息,以及支援哪些繪圖層面。
IViewObjectExImpl::QueryHitPoint 檢查指定的點是否位於指定的矩形中,並在 中pHitResult回HITRESULT值。
IViewObjectExImpl::QueryHitRect 檢查控件的顯示矩形是否重疊指定位置矩形中的任何點,並在 中 pHitResult傳回HITRESULT值。
IViewObjectExImpl::SetAdvise 設定控件與建議接收之間的連線,讓接收能夠收到控件檢視中變更的通知。
IViewObjectExImpl::Unfreeze 解除凍結控件的繪製表示。 ATL 實作會傳回E_NOTIMPL。

備註

IViewObjectIViewObject2IViewObjectEx 介面可讓控件直接顯示本身,以及建立和管理建議接收,以通知控件顯示中的變更容器。 介面 IViewObjectEx 支援延伸控件功能,例如無閃爍繪圖、非矩形和透明控件,以及點擊測試(例如,必須考慮控件上按下滑鼠的距離)。 類別 IViewObjectExImpl 會提供這些介面的預設實作,並將資訊傳送至偵錯組建中的傾印裝置來實 IUnknown 作。

繼承階層架構

IViewObjectEx

IViewObjectExImpl

需求

標頭: 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” 的矩形。

請參閱 Windows SDK 中的 IViewObject::D raw

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 單位為單位(每單位 0.01 公厘)。

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
user 參數。

物件
已收到訊號的句柄。

傳回值

傳回成功時S_OK,或在失敗時傳回錯誤 HRESULT。

備註

呼叫 CWorkerThread::AddHandle 之前,傳遞至這個方法的句柄和 DWORD/指標與這個對象相關聯。

範例

下列程式代碼顯示的簡單實作 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 專案
類別概觀