我們開發了一個Windows API應用程序,其中有一個帶有嵌套子菜單的上下文菜單。我們以多種語言本地化應用程序,包括希伯來語。
由於鍵盤支持對我們來說是必須的,我們需要知道子菜單是否應該在右箭頭(LTR)或左箭頭(RTL)鍵按下時打開。
我們的開發者確實使用TrackPopupMenu()
功能描述了here on MSDN,但是他需要知道時來設置TPM_LAYOUTRTL
標誌。
所以問題是:如何定義當前的系統區域設置是LTR還是RTL來正確處理菜單?定義當前系統區域設置是否爲RTL或LTR
1
A
回答
3
我在回答,因爲我們找到了解決方案(並且評論證實我們的方法正確)。
爲了定義當前系統區域設置是否爲RTL或LTR,我們應該使用GetLocaleInfoEx
和LOCALE_IREADINGLAYOUT
。 MSDN對此有以下說明:
Windows 7及更高版本:文本的閱讀版式。下表中定義了可能的值。
可能的值實際上是:
0
- 左到右(如英語);1
- 從右到左(如希伯來語或阿拉伯語);2
- 可以從上到下垂直讀取,列從右到左或水平行從左到右讀取(如在日語中);3
- 從上到下垂直讀取,列從左到右(如蒙古語)。
0
我們用下面的內部代碼:
bool IsCurrentInputLanguageRTL (void)
{
bool ret=false;
auto layout = GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), NULL));
auto lcid=MAKELCID(LOWORD(layout),SORT_DEFAULT);
LOCALESIGNATURE localesig;
// Windows XP and higher.
// Unicode subset bit fields: https://msdn.microsoft.com/en-us/library/windows/desktop/dd374090(v=vs.85).aspx
// Bit 123: Windows 2000 and later - Layout progress, horizontal from right to left.
if(GetLocaleInfoW(lcid,LOCALE_FONTSIGNATURE,(LPWSTR)&localesig,sizeof(localesig)/sizeof(WCHAR)) != 0)
ret = (localesig.lsUsb[3] & 0x08000000)!=0;
return ret;
}
相關問題
- 1. 我需要得到從Zend_Locale當前區域設置方向,RTL或LTR
- 2. Spree_i18n前端自定義區域設置
- 3. 如何手動確定當前操作系統的CodePage和區域設置
- 4. 系統區域設置/文化設置爲.Net
- 5. 基於系統區域設置在C++
- 6. 開源cms ltr rtl?
- 7. 系統語言和系統區域設置的mac?
- 8. 獲取ICU的當前區域設置
- 9. 從ltr到rtl的設計自動
- 10. 在LTR設備上強制RTL
- 11. 系統或配置設置
- 12. 如何爲不同的用戶設置不同的系統區域設置
- 13. LTR到RTL轉換器
- 14. BIRT RTL和LTR方向
- 15. 基於當前系統區域的字符串值構建DateTime
- 16. Android中的自定義區域設置
- 17. Django自定義區域設置目錄
- 18. WPF:自定義區域設置
- 19. 如何定義區域設置範圍?
- 20. 關於當前區域設置的自定義Android日期格式化
- 21. 更改系統使用vbs的區域/位置設置
- 22. Android - 在imageview中將當前圖像設置爲系統壁紙
- 23. 如何讓Django爲我的系統區域設置使用正確的當前時間?
- 24. 如何查找當前光標區域是否爲子彈
- 25. 訪問當前系統時間區
- 26. 當LayoutDirection設置爲rtl時,ActionLayout不顯示rtl
- 27. 如何檢查當前的操作系統是否爲Windows 7?
- 28. PHP:使用時區獲取當前區域設置
- 29. 如何將當前操作系統的值設置爲默認操作系統 - 通過c#代碼或腳本
- 30. 自定義操作使用wix設置基於系統區域設置的註冊表
http://blogs.msdn.com/b/oldnewthing/archive/2011/12/22/10250164.aspx – chris
沒錯,謝謝您!幾分鐘前我們發現了同樣的解決方案:) –