定义当前系统语言环境是RTL还是LTR

And*_*ine 3 c++ winapi internationalization

我们开发了Windows API应用程序,其中有一个带有嵌套子菜单的上下文菜单。我们以多种语言本地化该应用程序,包括希伯来语。
由于键盘支持对我们来说是必须的,因此我们需要知道是在按向右箭头(LTR)还是向左箭头(RTL)时打开子菜单。
我们的开发人员确实使用了MSDN上TrackPopupMenu()描述的功能,但是他需要知道何时设置标志。 因此,问题是:如何定义当前系统区域设置是LTR还是RTL才能正确处理菜单?TPM_LAYOUTRTL

And*_*ine 5

我正在回答,因为我们已经找到了解决方案(并且评论确认我们在正确的道路上)。
为了确定当前系统的语言环境是否是RTL或LTR,我们应该使用GetLocaleInfoExLOCALE_IREADINGLAYOUT。MSDN对此发表了以下看法:

Windows 7和更高版本:文本的阅读布局。下表中定义了可能的值。

可能的值实际上是:

  • 0 —从左到右(英语);
  • 1 —从右到左(希伯来语或阿拉伯语);
  • 2 —或者从上到下垂直阅读,列从右到左,或者从左到右阅读水平行(如日语);
  • 3 —从上到下垂直阅读,列从左到右(如蒙古语)。