diff --git a/desmume/src/windows/main.cpp b/desmume/src/windows/main.cpp index 5778f253a..feffe39d5 100644 --- a/desmume/src/windows/main.cpp +++ b/desmume/src/windows/main.cpp @@ -1052,25 +1052,30 @@ void MenuDeinit() DestroyMenu(mainMenu); } +typedef int (WINAPI *setLanguageFunc)(LANGID id); void SetLanguage(int langid) { + OSVERSIONINFO info; + ZeroMemory(&info, sizeof(info)); + info.dwOSVersionInfoSize = sizeof(info); + GetVersionEx(&info); + setLanguageFunc setLanguage = ((info.dwMajorVersion >= 6) ? + (setLanguageFunc)SetThreadUILanguage : (setLanguageFunc)SetThreadLocale); + switch(langid) { case 1: - // French - SetThreadLocale(MAKELCID(MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH), - SORT_DEFAULT)); + // French + setLanguage(MAKELCID(MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH), SORT_DEFAULT)); break; case 2: // Danish - SetThreadLocale(MAKELCID(MAKELANGID(LANG_DANISH, SUBLANG_DEFAULT), - SORT_DEFAULT)); + setLanguage(MAKELCID(MAKELANGID(LANG_DANISH, SUBLANG_DEFAULT), SORT_DEFAULT)); break; case 0: // English - SetThreadLocale(MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), - SORT_DEFAULT)); + setLanguage(MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT)); break; default: break; break; @@ -1763,26 +1768,26 @@ LRESULT OpenFile() } //TODO - async key state? for real? -int GetModifiers(int key) -{ - int modifiers = 0; - - if (key == VK_MENU || key == VK_CONTROL || key == VK_SHIFT) - return 0; - - if(GetAsyncKeyState(VK_MENU )) modifiers |= CUSTKEY_ALT_MASK; - if(GetAsyncKeyState(VK_CONTROL)) modifiers |= CUSTKEY_CTRL_MASK; - if(GetAsyncKeyState(VK_SHIFT )) modifiers |= CUSTKEY_SHIFT_MASK; - return modifiers; +int GetModifiers(int key) +{ + int modifiers = 0; + + if (key == VK_MENU || key == VK_CONTROL || key == VK_SHIFT) + return 0; + + if(GetAsyncKeyState(VK_MENU )) modifiers |= CUSTKEY_ALT_MASK; + if(GetAsyncKeyState(VK_CONTROL)) modifiers |= CUSTKEY_CTRL_MASK; + if(GetAsyncKeyState(VK_SHIFT )) modifiers |= CUSTKEY_SHIFT_MASK; + return modifiers; } -int HandleKeyMessage(WPARAM wParam, LPARAM lParam, int modifiers) +int HandleKeyMessage(WPARAM wParam, LPARAM lParam, int modifiers) { //some crap from snes9x I dont understand with toggles and macros... - bool hitHotKey = false; - - if((wParam == 0 || wParam == VK_ESCAPE)) // if it's the 'disabled' key, it's never pressed as a hotkey + bool hitHotKey = false; + + if((wParam == 0 || wParam == VK_ESCAPE)) // if it's the 'disabled' key, it's never pressed as a hotkey return 0; return 0; @@ -2649,12 +2654,12 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM } break; - case WM_SYSKEYDOWN: - { - int modifiers = GetModifiers(wParam); - if(!HandleKeyMessage(wParam,lParam, modifiers)) - return 0; - break; + case WM_SYSKEYDOWN: + { + int modifiers = GetModifiers(wParam); + if(!HandleKeyMessage(wParam,lParam, modifiers)) + return 0; + break; } case IDM_DEFSIZE: