显示亚洲字符(使用Unicode):在RichEdit控件中显示时与使用ExtTextOut相比,字符间距有所不同

Cod*_*Dan 5 windows unicode rtf richedit textout

这张照片说明了我的困境:

图片1

所有字符看起来都一样大小,但是在RichEdit控件中显示时,与我使用ExtTextOut时相比,它们之间的间距是不同的。

我想呈现与RichEdit控件中相同的字符(理想情况下),以保留换行位置。

谁能告诉我:

a)哪个更正确的表示形式?

b)为什么RichEdit控件显示的文本在亚洲字符之间没有空格?

c)有什么方法可以使ExtTextOut在绘制这些字符时重现RichEdit控件的行为?

d)如果我正在使用亚洲版本的Windows,这会有什么不同吗?

也许我很乐观,但是如果有人可以提供任何提示,我将非常感兴趣。

如果有帮助:

这是我的文字:

???????????1 2 3 4 5 6 7 8 9 0
Run Code Online (Sandbox Code Playgroud)

向亚洲读者表示歉意,这只是为了测试我们的Unicode实现,我什至不知道字符取自哪种语言,更不用说它们是否意味着任何意义了

为了通过将这些字符粘贴到RichEdit控件(例如,写字板)中来查看效果,您可能会发现必须滑动它们并将字体设置为“ Arial”。

我获得的富文本为:

{\ rtf1 \ ansi \ ansicpg1252 \ deff0 \ deflang2057 {\ fonttbl {\ f0 \ fnil \ fcharset0 Arial;}} {\ colortbl; \ red0 \ green0 \ blue0;} \ viewkind4 \ uc1 \ pard \ sa200 \ sl276 \ slmult1 \ lang9 \ fs22 \ u24555?\ u30340?\ u26837?\ u33394?\ u29392?\ u29432?\ u36339?\ u22312?\ u25078?\ u24816?\ u29399?1 2 3 4 5 6 7 8 9 0 \ par \ pard \'a3 $$ \ '80 \ '80 \ cf1 \ lang2057 \ fs16 \ par}

它似乎不包含字符“ pitch”的值,这是我的第一个想法。

Adr*_*thy 3

我不知道答案,但有几点值得怀疑:

  • Rich Edit 控件有多个版本。也许您使用的是较旧的版本,它没有所有最新的排版改进。
  • 有许多样式和标志会影响丰富的编辑控件的行为,因此您可能想要探索设置了哪些样式和标志以及它们的作用。例如,查看EM_GETEDITSTYLE
  • 许多亚洲字体在 Windows 上有两个版本。一种针对水平布局进行优化,另一种针对垂直布局进行优化。后者通常具有相同的名称,但已@放在其前面。也许您在丰富的编辑控件中使用了错误的控件。

更新:通过摆弄写字板,我能够重现富编辑控件中拥挤文本的问题。

  1. 在 Windows 7 上的写字板中打开一个新文档。请注意,所选字体是 Calibri。
  2. 将示例文本粘贴到文档中。
  3. 文本显示正确,但写字板将字体更改为 SimSun。
  4. 选择文本并将字体更改回 Calibri 或 Arial。

文本现在将变得拥挤,与您的示例非常相似。因此,根本问题似乎在于字体链接和后备。 ExtTextOut可能是自动为脚本选择合适的字体。您的挑战是弄清楚如何识别脚本的正确字体并在丰富的编辑控件中设置该字体。