Windows:使用TextOut从右向左输出字符

时间:2015-10-15 19:27:00

标签: right-to-left textout

我想询问win32原生TextOutW函数的帮助,当它显示从右到左文本方向的字符时。基本上,我希望TextOutW按原样显示带有字符的文本,而不对文本应用任何转换,整形等。

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

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

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

דש

当然,我可以想到许多变通方法如何覆盖它,最简单的只是在文本前添加0x202D [2]字符。但这似乎是hacky并且通常是错误的,并且也不会帮助我例如阿拉伯语文本将自动加入字母(并且将需要更加丑陋的变通方法)。

是否有关于此Windows行为的信息?我怎么能在程序中关闭它?这是与Uniscribe相关的吗? (我从不 使用它并且不打算)。

谢谢!

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

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

1 个答案:

答案 0 :(得分:0)

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

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