我有一个由
CreateWindowExW()
使用 WC_LISTVIEWW
创建的 ListView。然后,我使用 LVCOLUMNW
创建列,并通过 pszText
设置文本。文本为阿拉伯语。
我希望此列表视图的列文本显示为 RTL,因此我将
WS_EX_RTLREADING
添加到扩展样式中。但是,它没有任何效果,因为根据 Microsoft,shell 语言需要是阿拉伯语或希伯来语。
我尝试使用
SetThreadUILanguage()
将线程语言设置为阿拉伯语,但没有帮助。
这个“shell语言”到底是什么?这是运行我的 Win32 应用程序的 shell 的语言吗?如果是,那只是
cmd.exe
的语言,还是操作系统语言?有没有办法在应用程序运行时动态更改此 shell 语言,然后再更改回来?
不,“shell 语言”不是
cmd.exe
的语言。我相信这也适用于 Explorer。这是另一个同意这一点的答案:Windows 资源管理器是一个外壳,并为这种解释提供了很好的理由。
您明确链接的 Microsoft doc 明确指出,当 shell 语言不是 RTL 时,WS_EX_RTLREADING
无效。除了希伯来语和阿拉伯语之外,还包括波斯语、乌尔都语和其他语言。不幸的是,其中一些语言包没有定义完整的 Windows 资源管理器 UI,因此不能算作“shell 语言”。