指定文本输出字符串的长度

多个字体和文本输出函数具有一个参数,用于指定文本输出字符串的长度。 一个典型示例是 DrawTextExcchText 参数。

其中每个函数都具有“ANSI”版本和 Unicode 版本, (分别) DrawTextExADrawTextExW。 对于每个函数的“ANSI”版本,长度指定为 BYTE 计数,而 Unicode 函数的长度指定为 WORD 计数。

将这视为“字符计数”是传统的。 这通常对于多种语言(包括英语)是准确的,但一般情况下并不准确。 在“ANSI”字符串中, SBCS 代码页中的字符各采用一个字节,但 DBCS 代码页中的大多数字符采用两个字节。 同样,当前定义的大多数 Unicode 字符都驻留在基本多语言平面 (BMP) ,其 UTF-16 表示形式适合一个 WORD,但补充字符在 Unicode 中由“代理项”表示,这需要两个 WORD。

其中每个函数都需要一个长度计数。 对于每个函数的“ANSI”版本,长度指定为不包含 NULL 终止符的字符串的 BYTE 计数长度。 对于 Unicode 函数,长度计数是字节计数除以 sizeof (WCHAR) ,即 2,不包括 NULL 终止符。 字符计数是字符数的计数,可能不等于字符串的长度计数。 在某些情况下,ANSI (字符采用多个 BYTE,例如 DBCS 字符) ,将多个 WORD 用于 Unicode (,代理字符) 。 此外,字形的数量可能不等于字符数,因为可能会组合多个字符以生成一个字形。 长度计数是数据量。 字符计数是作为一个实体处理的单位数。 标志符号是呈现的内容。 例如,在 Unicode 中,可以有一个长度为 3 的字符串,该字符串为 2 个字符,导致呈现 1 个字形。 但是,通常情况下,大多数 Unicode 字符串的长度、字符计数和呈现的字形数都相等。

可以使用 _tcslen () 获取字符串长度。 对于 ANSI,_tcslen () 返回字节数。 对于 Unicode,_tcslen () 返回 WCHAR (即 WORD) 数。

不总是绘制的特殊处理字符(如制表符和软连字符)可能会影响绘制的输出。 它们包含在字符串长度和字符计数中,但可能不会由呈现的字形直接表示。

其中一些函数允许调用方将长度指定为 -1,以指示字符串以 null 结尾;在这种情况下, 函数将自动计算字符计数。 并非所有函数都提供此功能。 这是逐个函数指定的;请参阅单个函数文档。