ITextServices2::TxGetNaturalSize2 方法 (textserv.h)

调整控件的大小,使其适合其内容。 此方法类似于 TxGetNaturalSize,但也检索文本首行的上升。

语法

HRESULT TxGetNaturalSize2(
  DWORD          dwAspect,
  HDC            hdcDraw,
  HDC            hicTargetDev,
  DVTARGETDEVICE *ptd,
  DWORD          dwMode,
  const SIZEL    *psizelExtent,
  LONG           *pwidth,
  LONG           *pheight,
  LONG           *pascent
);

参数

dwAspect

类型: DWORD

绘图的方面。 它可以是 DVASPECT 枚举中的任何值。

hdcDraw

类型: HDC

在其中进行绘制的设备上下文。

hicTargetDev

类型: HDC

应为其设置文本格式的设备上下文, (即,对于 WYSIWYG) 。

ptd

类型: DVTARGETDEVICE*

有关目标设备的详细信息。

dwMode

类型: DWORD

请求的拟合类型。 可以是以下任一项。

含义
TXTNS_EMU
使用英语公制单位 (ETU) 而不是像素作为测量单位, (此方法参数的双向) 。
TXTNS_FITTOCONTENT
通过将文本格式化为传入的宽度,调整控件的大小以适应整个文本。 文本服务对象返回整个文本的高度和最宽行的宽度。

例如,当用户双击控件的句柄之一时,应执行此操作。

TXTNS_FITTOCONTENT2
调整控件的大小,使其适合缩进的内容。
TXTNS_FITTOCONTENT3
调整控件的大小,使其适合缩进内容和尾随空格。
TXTNS_FITTOCONTENTWSP
调整控件的大小,使其适合未识别的内容和尾随空格。
TXTNS_INCLUDELASTLINE
对于纯文本控件,在计算大小时包括最终回车符的高度。
TXTNS_ROUNDTOLINE
调整控件的大小以显示整型行数, () 不剪裁任何行。 设置足够的文本格式以填充传入的宽度和高度,然后返回舍入到最接近的线条边界的高度。
注意 传递和返回的宽度和高度对应于视图矩形。 主机应根据需要调整回客户端矩形。 由于这些值表示文本对象的范围,因此它们采用 HIMETRIC 坐标 (每个 HIMETRIC 单位为 0.01 毫米) ,并且度量值不包括任何缩放因子。 有关缩放因子的讨论,请参阅 TxGetExtent
 

psizelExtent

类型: const SIZEL*

) 用于缩放的 (以 HIMETRIC 单位为单位的盘区的大小。

pwidth

类型: LONG*

dwMode 定义的管接头的宽度。

pheight

类型: LONG*

dwMode 定义的管接头的高度。

pascent

类型: LONG*

对于单行控件,接收高于基线) 文本首行字符的上升 (单位。

返回值

类型: HRESULT

如果方法成功,则返回值 S_OK

如果文本服务无法激活 对象,则返回值为以下 HRESULT 代码之一。 有关 COM 错误代码的详细信息,请参阅 COM 中的错误处理

返回代码 说明
E_FAIL
无法确定正确的大小。
E_INVALIDARG
一个或多个参数无效。
E_OUTOFMEMORY
内存不足。

注解

前四个参数类似于 ITextServices::TxDraw 中的等效参数,并提供相同的信息。 在必须重新计算行的情况下, TxGetNaturalSize2 以与 ITextServices::TxDraw 中相同的方式使用这些值。

pwidthpheight 参数为 in/out 参数。 主机传入文本对象自然范围的暂定宽度和高度。 文本服务对象将这些值与其当前缓存状态进行比较,如果不同,则重新计算行。 然后,它计算并返回 dwMode 指定的自然大小。

示例

以下示例演示如何将 的 psizelExtent 参数初始化为 1:1 的缩放因子。 省略号指示需要提供的代码。


LONG dxpi = GetDeviceCaps(hdc, LOGPIXELSX);
LONG dypi = GetDeviceCaps(hdc, LOGPIXELSY);
LONG dyAscent = 0;
LONG dx = ... ;  // Text image width, in pixels 
LONG dy = ... ;  // Text image height, in pixels 
SIZEL sizel;     // dx and dy, in HIMETRIC

ITextServices2 *pserv = ... ; // Interface for single-line control

sizel.cx = MulDiv(dx, HIMETRIC_PER_INCH, dxpi); 
sizel.cy = MulDiv(dy, HIMETRIC_PER_INCH, dypi);

pserv->TxGetNaturalSize2(DVASPECT_DOCPRINT, hdc, hdcNil, pNil,
    TXTNS_FITTOCONTENT, &sizel, &dx, &dy, &dyAscent))) 

要求

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

另请参阅

ITextServices2