0

当涉及到显示具有从右到左文本方向的字符时,我想寻求有关 win32 本机 TextOutW 功能的帮助。基本上,我希望 TextOutW 按原样显示带有字符的文本,而不对文本应用任何转换、整形等。

我所拥有的基本上是一个简单的代码 [1],如下所示:

WCHAR text[2] = { 0x5D3, 0x5E9 };
TextOutW(hdc, 100, 100, ( LPCWSTR ) text, 2);

我之所以使用它是因为我想将两个字符从左到右绘制在一起,首先是 0x5D3 (ד),然后是 0x5E9 (ש)。我得到的是相反的-首先绘制0x5E9,然后绘制0x5D3:

דש

当然,我可以想到许多解决方法来覆盖它,最简单的就是在文本前面添加 0x202D [2] 字符。但这似乎很老套,而且通常是错误的,并且对于例如会自动加入字母的阿拉伯语文本(并且需要更丑陋的解决方法)也无济于事。

有关于此 Windows 行为的任何信息吗?我怎么能在程序中关闭它?这与Uniscribe有关吗?(我从未使用过它,也不打算使用它)。

谢谢!

[1](完整代码在这里http://karasik.eu.org/misc/rtl.c)。

[2] U+202D (LRO) LEFT-TO-RIGHT OVERRIDE:强制以下字符被视为强从左到右字符。

4

1 回答 1

0

查看ExtTextOut()函数,尤其是ETO_GLYPH_INDEX标志。

请注意,此行为并非特定于 Windows(但 Unicode 布局的 Windows 实现与其他平台略有不同)。您不能神奇地为您的程序“关闭”它,例如通过选择一些特殊的语言环境。

于 2015-10-15T20:55:46.477 回答