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 | 從控件類別數據成員 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。 |
備註
IViewObject、IViewObject2 和 IViewObjectEx 介面可讓控件直接顯示本身,以及建立和管理建議接收,以通知控件顯示中的變更容器。 介面 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;
}