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 为单位,每单位 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::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 为单位,每单位 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
用户参数。
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;
}