当涉及到以从右到左的文本方向显示字符时,我想寻求有关win32原生TextOutW函数的帮助。基本上,我希望TextOutW按原样显示包含字符的文本,而不对文本应用任何转换、整形等。
我所拥有的基本上是一个简单的代码1,如下所示:
WCHAR text[2] = { 0x5D3, 0x5E9 };
TextOutW(hdc, 100, 100, ( LPCWSTR ) text, 2);我之所以使用它,是因为我想从左到右绘制两个字符,首先是0x5D3 (ד),然后是0x5E9 (ש)。我得到的是相反的结果--首先绘制0x5E9,然后绘制0x5D3:
דש
当然,我可以想到许多替代方法来覆盖它,最简单的就是在文本前面添加0x202D2字符。但这似乎有点老生常谈,而且通常是错误的,而且也不会对我有帮助的例如阿拉伯语文本,将有字母自动连接(并将需要更丑陋的解决办法)。
是否有关于此Windows行为的任何信息?我怎么才能在程序中关闭它呢?这与Uniscribe有关吗?(我从未使用过它,也不打算使用它)。
谢谢!
1。
2 U+202D (LRO)从左到右覆盖:强制将以下字符视为从左到右的强字符。
发布于 2015-10-16 04:55:46
看看ETO_GLYPH_INDEX标志的函数。
请注意,此行为不是特定于Windows的(但Unicode布局的Windows实现与其他平台略有不同)。你不能为你的程序神奇地“关闭它”,例如通过选择一些特殊的语言环境。
https://stackoverflow.com/questions/33156889
复制相似问题