ITextServices::TxDraw 方法 (textserv.h)

绘制文本服务对象。

语法

HRESULT TxDraw(
  [in] DWORD           dwDrawAspect,
       LONG            lindex,
  [in] void            *pvAspect,
  [in] DVTARGETDEVICE  *ptd,
  [in] HDC             hdcDraw,
  [in] HDC             hicTargetDev,
  [in] LPCRECTL        lprcBounds,
  [in] LPCRECTL        lprcWBounds,
  [in] LPRECT          lprcUpdate,
       BOOL(* )(DWORD) pfnContinue,
       DWORD           dwContinue,
       LONG            lViewId
);

参数

[in] dwDrawAspect

类型: DWORD

指定要绘制的方面,即,要如何表示该对象。 绘图方面可以是以下值之一。

含义
DVASPECT_CONTENT
将文本内容的屏幕图像呈现到 hdcDraw 设备上下文。

hicTargetDevptd 参数提供有关目标设备上下文的信息(如果任何 (通常打印机) )。

DVASPECT_DOCPRINT
将对象呈现到 hdcDraw 设备上下文中,就像将其打印到打印机一样。 因此,文本服务对象可以优化打印机 (例如,如果) 白色,则不绘制背景色。 此外,不应呈现某些特定于屏幕的元素 (,例如选择) 。

ITextServices::TxDraw 应从当前滚动位置开始呈现 lprcBounds 矩形。

lindex

类型: LONG

不支持。

[in] pvAspect

类型: void*

有关绘图优化的信息。

[in] ptd

类型: DVTARGETDEVICE*

目标设备。

[in] hdcDraw

类型: HDC

呈现设备上下文。

[in] hicTargetDev

类型: HDC

目标信息上下文。

[in] lprcBounds

类型: LPCRECTL

边界 (客户端) 矩形。

[in] lprcWBounds

类型: LPCRECTL

图元文件剪裁矩形。

[in] lprcUpdate

类型: LPRECT

lprcBounds 中的更新区域。

pfnContinue

类型: BOOL CALLBACK*

不支持。

dwContinue

类型: DWORD

要传递给 continue 函数的参数。

lViewId

类型: LONG

指定要绘制的视图。

含义
TXTVIEW_ACTIVE
绘制就地活动视图。
TXTVIEW_INACTIVE
绘制非就地活动视图的视图;例如打印预览。

返回值

类型: HRESULT

返回值通常是 S_OK

注解

此方法呈现文本服务对象。 它接受与 OLE 中相应的 IViewObject::D raw 方法相同的参数,以及额外的 lprcUpdatelViewId 参数。 当主机就地处于活动状态或处于非活动状态时,可以使用它。

lprcBounds 参数提供要呈现的矩形,也称为客户端矩形。 此矩形表示要绘制的文本服务对象的整个图像的位置和范围。 它以 hdcDraw 的逻辑坐标系表示。 如果 lprcBoundsNULL ,则控件必须处于活动状态。 在这种情况下,文本服务对象应呈现就地活动视图 (,即可以通过调用主机) 上的 TxGetClientRect 获取的客户端矩形。

如果 lprcUpdate 参数不为 NULL,它将提供该矩形,以在 hdcDraw 的逻辑坐标系中更新该客户端矩形。 如果 lprcUpdateNULL,则应绘制整个客户端矩形。

文本服务对象应使用适当的缩放系数呈现,该比例可以从客户端矩形和 TxGetExtent 给定的本机大小中获取。 有关缩放系数的讨论,请参阅 TxGetExtent

对于 ITextServices::OnTxSetCursor 和 ITextServices::TxQueryHitPoint) ,有关 OLE 主机和 ITextServices::TxDraw (的一般注释:

OLE 主机可以随时使用任何呈现设备上下文或客户端矩形调用 ITextServices::TxDraw 方法。 处于非活动状态的 OLE 对象仅保留一个盘区。 为了获取要在其中呈现的矩形,主机调用 IViewObject::D raw 方法。 此矩形仅对该方法的范围有效。 因此,同一控件可以在不同的矩形和不同的设备上下文中连续呈现,例如,因为它同时显示在屏幕上的不同视图中。

通常,不应缓存传递给 ITextServices::TxDraw 的客户端矩形和设备上下文,因为这将强制文本服务对象重新计算每次绘制的行,这会妨碍性能。 相反,文本服务对象可以缓存为特定客户端矩形和设备上下文 ((如换行符) )计算的信息。 但是,在下一次调用 ITextServices::TxDraw 时,应先检查缓存信息的有效性,然后再使用它,并在必要时重新生成更新的信息。

此外,当控件就地处于活动状态时,请小心谨慎。 此问题更为复杂,因为仍可调用 ITextServices::TxDraw 来呈现就地活动视图以外的其他视图。 换句话说,传递给 ITextServices::TxDraw 的客户端矩形可能与 (传递给 ITextServices::OnTxInPlaceActivate 并通过主机) 上的 TxGetClientRect 获取的活动矩形不同。

要求

   
最低受支持的客户端 Windows Vista [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 textserv.h
DLL Msftedit.dll

请参阅

概念性

DVTARGETDEVICE

ITextServices

IViewObject::Draw

OnTxInPlaceActivate

其他资源

矩形

RECTL

引用

TxGetClientRect

TxGetExtent

无窗口 Rich Edit 控件