当涉及到显示具有从右到左文本方向的字符时,我想寻求有关 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:强制以下字符被视为强从左到右字符。