在Visual Studio中,您需要设置扩展窗口样式以获得从右到左的读取顺序(WS_EX_LAYOUTRTL)。为什么这是必需的,因为如果我使用UNICODE并显示阿拉伯字符,唯一可能的显示方式是从右到左?令我感到惊讶的是,系统不能简单地以正确的方式呈现它。要注意:这是在Windows Mobile系统上,我已经将Arial Unicode MS字体复制到其上,这或许可以解释为什么它无法应对。
答案 0 :(得分:3)
Windows对RTL的支持比文本更复杂:WS_EX_LAYOUTRTL实际上是关于控制窗口中其他元素的布局 - 来自MSDN:
窗口布局适用于文本,但也会影响窗口的其他GDI元素,包括位图,图标,原点位置,按钮,级联树控件以及水平坐标是否向左或向右增加。例如,在应用程序设置了RTL布局后,原点位于窗口或设备的右边缘,表示水平坐标的数字随着向左移动而增加。
因此,如果您创建一个具有此对话框的对话框,则对话框将自动“翻转”(因为坐标相反)。如果存在滚动条,它将位于窗口的左侧,而不是右侧。 Treeviews将在右侧显示展开/折叠框和连接线,而不是左侧 - 依此类推。
在静态的情况下,它不包含其他窗口,样式可能看起来没什么区别 - 但它可能会颠覆理由:使用SS_RIGHT右对齐的静态可能最终会实际结束使用WS_EX_LAYOUTRTL时左对齐。
另外,正如其他答案所指出的那样,并非所有文本都是单一语言的跨度。可以有一个混合脚本的字符串:你可以在R到L之间有L-to-R跨度,反之亦然,因此让Windows根据所用文本“做正确的事”将非常脆弱。
还要考虑树视图的情况,该树视图显示在阿拉伯语系统上运行的文件名:树视图应保持从右到左的布局(与右侧对齐),即使用户恰好正在浏览目录或碰巧有英文文件名的文件系统。
长话短说:WS_EX_LAYOUTRTL实际上是关于整体窗口布局,而不是文本方向本身。即使没有此标志,如果使用标准API /控件,您仍应将阿拉伯语/希伯来语正确地呈现为R-to-L。
答案 1 :(得分:0)
大概是因为无法确定您要在窗口级别显示什么 - 您可能无法显示任何内容,从左到右阅读的语言或从右到左阅读的语言。因此,您需要明确地设置它,而不是让它尝试基于不完整的信息进行推断。