我們開發了一個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. 從RTL設置Word.Selection LTR
- 3. 如何獲取當前系統區域設置名稱?
- 4. 更改當前系統區域設置編程
- 5. Spree_i18n前端自定義區域設置
- 6. 區域設置:瀏覽器或操作系統設置?
- 7. 如何手動確定當前操作系統的CodePage和區域設置
- 8. 必須將Windows系統區域設置爲系統範圍?
- 9. 在一個textarea,當前行的方向上從「RTL」變爲「LTR」
- 10. 系統區域設置/文化設置爲.Net
- 11. 管理爲LTR和RTL
- 12. 基於系統區域設置在C++
- 13. 如何識別用戶是否以RTL或LTR語言輸入?
- 14. 系統語言和系統區域設置的mac?
- 15. 開源cms ltr rtl?
- 16. 獲取ICU的當前區域設置
- 17. ckeditor bidi force使用方向rtl或ltr
- 18. 從ltr到rtl的設計自動
- 19. 在LTR設備上強制RTL
- 20. 如何獲取Windows Phone上的「系統區域設置」設置?
- 21. 什麼是CoreLocation的區域監控系統定義的坐墊?
- 22. 系統或配置設置
- 23. 如何爲不同的用戶設置不同的系統區域設置
- 24. BIRT RTL和LTR方向
- 25. JSP國際化RTL/LTR
- 26. RTL和LTR(雙向)在UITextView
- 27. LTR到RTL轉換器
- 28. 基於當前系統區域的字符串值構建DateTime
- 29. Android中的自定義區域設置
- 30. WPF:自定義區域設置
http://blogs.msdn.com/b/oldnewthing/archive/2011/12/22/10250164.aspx – chris
沒錯,謝謝您!幾分鐘前我們發現了同樣的解決方案:) –