调用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_WORDBREAKDT_NOFULLWIDTHCHARBREAK 均设置:仅在空白处进行分词。

该代码不进行任何语言分析来识别片假名单词的开始和结束位置。