IViewObject::D raw 方法 (oleidl.h)
将对象的表示形式绘制到指定的设备上下文中。
语法
HRESULT Draw(
[in] DWORD dwDrawAspect,
[in] LONG lindex,
[in] void *pvAspect,
[in] DVTARGETDEVICE *ptd,
[in] HDC hdcTargetDev,
[in] HDC hdcDraw,
[in] LPCRECTL lprcBounds,
[in] LPCRECTL lprcWBounds,
[in] BOOL(* )(ULONG_PTR dwContinue) pfnContinue,
[in] ULONG_PTR dwContinue
);
参数
[in] dwDrawAspect
指定要绘制的方面,即,要如何表示该对象。 表示形式包括内容、图标、缩略图或打印的文档。 有效值取自 枚举 DVASPECT 和 DVASPECT2。 请注意,支持优化绘图接口的较新的对象和容器支持 DVASPECT2 枚举值。 不支持优化绘图接口的旧对象和容器可能不支持 DVASPECT2。 无窗口对象仅允许 DVASPECT_CONTENT、 DVASPECT_OPAQUE和 DVASPECT_TRANSPARENT。
[in] lindex
与绘制操作有关的对象部分。 其解释因 dwAspect 参数中的值而异。 有关详细信息,请参阅 DVASPECT 枚举。
[in] pvAspect
指向 DVASPECTINFO 结构中其他信息的指针,该结构根据指定的方面启用绘图优化。 请注意,支持优化绘图接口的较新对象和容器也支持此参数。 不支持优化绘图接口的旧对象和容器始终为此参数指定 NULL 。
[in] ptd
指向 DVTARGETDEVICE 结构的指针,该结构描述要呈现对象的设备。 如果 为 NULL,则应为默认目标设备呈现视图, (通常为显示) 。 NULL 以外的值与 hdcTargetDev 和 hdcDraw 一起解释。 例如,如果 hdcDraw 将打印机指定为设备上下文, 则 ptd 参数指向描述该打印机设备的结构。 如果 hdcTargetDev 是有效值,则实际上可以打印数据;如果 hdcTargetDev 为 NULL,则数据可能以打印预览模式显示。
[in] hdcTargetDev
由 ptd 参数指示的目标设备的信息上下文,对象可以从中提取设备指标并测试设备的功能。 如果 ptd 为 NULL;对象应忽略 hdcTargetDev 参数中的值。
[in] hdcDraw
要进行绘制的设备上下文。 对于无窗口对象, hdcDraw 参数应处于MM_TEXT映射模式,其逻辑坐标与包含窗口的客户端坐标匹配。 对于无窗口对象,设备上下文应与通常由WM_PAINT消息传递的设备上下文处于相同的状态。
[in] lprcBounds
指向 RECTL 结构的指针,该结构指定 hdcDraw 上应绘制对象的矩形。 此参数控制对象的定位和拉伸。 此参数应为 NULL ,以绘制无窗口就地活动对象。 在所有其他情况下, NULL 不是法定值,应导致E_INVALIDARG错误代码。 如果容器将非 NULL 值传递给无窗口对象,则 对象应将请求的方面呈现到指定的设备上下文和矩形中。 容器可以从无窗口对象请求此操作,以呈现该对象的第二个非活动视图或打印该对象。
[in] lprcWBounds
如果 hdcDraw 是图元文件设备上下文,则指向 RECTL 结构的指针,该结构指定基础图元文件中的边界矩形。 矩形结构包含窗口范围和窗口原点。 这些值可用于绘制图元文件。 lprcBounds 指示的矩形嵌套在此 lprcWBounds 矩形中;它们位于同一坐标空间中。
如果 hdcDraw 不是图元文件设备上下文; lprcWBounds 将为 NULL。
[in] pfnContinue
一个指向回调函数的指针,视图对象应当在持续时间很长的绘制操作过程中定期调用该函数,以确定该操作应当继续还是应当取消。 此函数返回 TRUE 以继续绘制。 它返回 FALSE 以停止绘图,在这种情况下 ,IViewObject::D raw 返回DRAW_E_ABORT。
dwContinue
[in] dwContinue
要作为参数传递给 pfnContinue 参数指向的函数的值。 通常, dwContinue 是指向回调函数内所需的应用程序定义结构的指针。
返回值
此方法在成功时返回S_OK。 其他可能的返回值包括以下内容。
返回代码 | 说明 |
---|---|
|
没有要从中提取的数据。 |
|
绘制操作已中止。 |
|
绘图时出错。 |
|
lindex 的值无效;目前仅支持 -1。 |
|
dwAspect 的值无效。 |
|
无效的矩形。 |
注解
容器应用程序发出对 IViewObject::D raw 的调用,以创建包含对象的表示形式。 此方法在指定设备上下文 (hdcDraw) 上绘制指定视图 (dwAspect 和 pvAspect) 的指定部分 (lindex) 。 格式设置、字体和其他呈现决策是根据 ptd 参数指定的目标设备做出的。
dwDrawAspect 值和 lprcbounds 值之间存在关系。 lprcbounds 值指定要将绘图映射到的 hdcDraw 上的矩形。 对于 DVASPECT_THUMBNAIL、 DVASPECT_ICON和 DVASPECT_SMALLICON,对象绘制它想要绘制的任何绘图,然后以最佳方式将其映射到给定的空间中。 某些对象可能会缩放以适应,而有些对象可能会缩放以适应,但会保留纵横比。 此外,有些人可能会缩放,使绘图以全宽显示,但底部会裁剪。 容器可以通过 IOleObject::SetExtent 建议大小,但它无法控制呈现大小。 对于 DVASPECT_CONTENT,IViewObject::D raw 实现应使用 IOleObject::SetExtent 提供的盘区或使用 lprcBounds 参数中给定的边框。
对于支持优化绘图技术和无窗口对象的较新对象,应按如下所示使用此方法:
- dwAspect 支持DVASPECT2中定义的新绘图方面。
- pvAspect 参数可用于传递其他信息,以便通过 DVASPECTINFO 结构进行绘制优化。
- 可以通过将 lrpcBounds 参数设置为 NULL 来调用 IViewObject::D raw 方法来重新绘制无窗口就地活动对象。 在所有其他情况下, NULL 都是非法值,应导致E_INVALIDARG错误代码。 无窗口对象使用激活谓词传递的矩形,或者调用 IOleInPlaceObject::SetObjectRects ,而不是使用此参数。 如果容器将非 NULL 值传递给无窗口对象,则 对象应将请求的方面呈现到指定的设备上下文和矩形中。 容器可以从无窗口对象请求此操作,以呈现该对象的第二个非活动视图或打印该对象。 有关绘制无窗口对象的详细信息,请参阅 IOleInPlaceSiteWindowless 接口。
- 对于无窗口对象, dwAspect 参数仅允许 DVASPECT_CONTENT、 DVASPECT_OPAQUE和 DVASPECT_TRANSPARENT方面。
- 对于无窗口对象,hdcDraw 参数应处于MM_TEXT映射模式,其逻辑坐标与包含窗口的客户端坐标匹配。 对于无窗口对象,设备上下文应与通常由WM_PAINT消息传递的设备上下文处于相同的状态。
对象的范围取决于绘图方面。 对于非矩形对象,范围应是覆盖整个方面的矩形的大小。 按照约定,对象的原点是 DVASPECT 的矩形的左上角_CONTENT方面。 换句话说,原点始终与对象的站点维护的矩形的左上角重合,即使对于非矩形对象也是如此。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | oleidl.h |