调用DrawText时DT_NOFULLWIDTHCHARBREAK有什么作用?
What is the effect of the DT_NOFULLWIDTHCHARBREAK when calling DrawText?
DrawText
的 MSDN 文档对于 DT_NOFULLWIDTHCHARBREAK
标志不是特别清楚。
它仍然允许 DT_WORDBREAK
使用非 CJK 语言吗?它如何打破 CJK 语言?如果我理解正确的话,这些语言不会像英语那样使用空格。 DT_NOFULLWIDTHCHARBREAK
是否有识别 CJK 单词的特殊规则,或者它会在片假名单词的中间中断吗?
文档说明了它的作用,尽管它使用的是旧术语。 "Prevents a line break at a DBCS (double-wide character string), so that the line-breaking rule is equivalent to SBCS strings." DBCS 是代码页时代遗留下来的旧术语。你可以把它想象成"full width characters"的意思。全角字符的示例有 CJK 统一表意文字、平假名、片假名和韩文字符。
默认情况下,全角字符被视为有效的分词点。使用 DT_NOFULLWIDTHCHARBREAK
禁用此行为。
换句话说:
DT_WORDBREAK
未设置:不发生断字。
DT_WORDBREAK
已设置,但 DT_NOFULLWIDTHCHARBREAK
未设置:在空格和全角字符处进行分词。
DT_WORDBREAK
和 DT_NOFULLWIDTHCHARBREAK
均设置:仅在空白处进行分词。
该代码不进行任何语言分析来识别片假名单词的开始和结束位置。
DrawText
的 MSDN 文档对于 DT_NOFULLWIDTHCHARBREAK
标志不是特别清楚。
它仍然允许 DT_WORDBREAK
使用非 CJK 语言吗?它如何打破 CJK 语言?如果我理解正确的话,这些语言不会像英语那样使用空格。 DT_NOFULLWIDTHCHARBREAK
是否有识别 CJK 单词的特殊规则,或者它会在片假名单词的中间中断吗?
文档说明了它的作用,尽管它使用的是旧术语。 "Prevents a line break at a DBCS (double-wide character string), so that the line-breaking rule is equivalent to SBCS strings." DBCS 是代码页时代遗留下来的旧术语。你可以把它想象成"full width characters"的意思。全角字符的示例有 CJK 统一表意文字、平假名、片假名和韩文字符。
默认情况下,全角字符被视为有效的分词点。使用 DT_NOFULLWIDTHCHARBREAK
禁用此行为。
换句话说:
DT_WORDBREAK
未设置:不发生断字。DT_WORDBREAK
已设置,但DT_NOFULLWIDTHCHARBREAK
未设置:在空格和全角字符处进行分词。DT_WORDBREAK
和DT_NOFULLWIDTHCHARBREAK
均设置:仅在空白处进行分词。
该代码不进行任何语言分析来识别片假名单词的开始和结束位置。