mirror of
https://github.com/rizonesoft/Notepad3.git
synced 2026-06-14 21:09:05 +08:00
+ fix: minor problems on load/release MUI language libs
This commit is contained in:
parent
e66096feca
commit
06f6981e20
@ -188,7 +188,7 @@ static bool _GetUserPreferredLanguage(LPWSTR pszPrefLocaleName, int cchBuffer, L
|
||||
// LoadLanguageResources
|
||||
//
|
||||
//
|
||||
HMODULE LoadLanguageResources(LANGID* pPrefLanguageID)
|
||||
LANGID LoadLanguageResources()
|
||||
{
|
||||
// 1st check language resources
|
||||
Globals.iAvailLngCount = _CheckAvailableLanguageDLLs();
|
||||
@ -241,23 +241,27 @@ HMODULE LoadLanguageResources(LANGID* pPrefLanguageID)
|
||||
// obtains access to the proper resource container
|
||||
// for standard Win32 resource loading this is normally a PE module - use LoadLibraryEx
|
||||
|
||||
HMODULE hLangResourceContainer = NULL;
|
||||
HINSTANCE _hLangResourceContainer = NULL;
|
||||
Globals.bPrefLngNotAvail = (iPrefLngIndex < 0);
|
||||
|
||||
if ((iPrefLngIndex >= 0) && MUI_LanguageDLLs[iPrefLngIndex].bHasDLL) {
|
||||
hLangResourceContainer = (0 == iPrefLngIndex) ? Globals.hInstance :
|
||||
_hLangResourceContainer = (iPrefLngIndex == 0) ? Globals.hInstance :
|
||||
LoadMUILibrary(L"lng/np3lng.dll", MUI_LANGUAGE_NAME | MUI_LANGUAGE_EXACT, languageID);
|
||||
MUI_LanguageDLLs[iPrefLngIndex].bIsLoaded = true;
|
||||
if (_hLangResourceContainer) {
|
||||
MUI_LanguageDLLs[0].bIsActive = false;
|
||||
MUI_LanguageDLLs[iPrefLngIndex].bIsActive = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!hLangResourceContainer) {
|
||||
if (!_hLangResourceContainer) {
|
||||
// fallback to ENGLISH_US
|
||||
//GetLastErrorToMsgBox(L"LoadMUILibrary", 0);
|
||||
Globals.bPrefLngNotAvail = (languageID != MUI_LanguageDLLs[0].LangId);
|
||||
languageID = MUI_LanguageDLLs[0].LangId;
|
||||
hLangResourceContainer = Globals.hInstance;
|
||||
MUI_LanguageDLLs[0].bIsLoaded = true;
|
||||
_hLangResourceContainer = Globals.hInstance;
|
||||
MUI_LanguageDLLs[0].bIsActive = true;
|
||||
}
|
||||
|
||||
Globals.hLngResContainer = _hLangResourceContainer;
|
||||
SetThreadUILanguage(languageID);
|
||||
|
||||
// update language dependent items
|
||||
@ -266,8 +270,7 @@ HMODULE LoadLanguageResources(LANGID* pPrefLanguageID)
|
||||
Encoding_SetLabel(enc);
|
||||
}
|
||||
|
||||
*pPrefLanguageID = languageID;
|
||||
return hLangResourceContainer;
|
||||
return languageID;
|
||||
}
|
||||
|
||||
|
||||
@ -276,15 +279,16 @@ HMODULE LoadLanguageResources(LANGID* pPrefLanguageID)
|
||||
// FreeLanguageResources
|
||||
//
|
||||
//
|
||||
void FreeLanguageResources(HMODULE hLangResourceContainer)
|
||||
void FreeLanguageResources()
|
||||
{
|
||||
if (hLangResourceContainer) {
|
||||
if (hLangResourceContainer != Globals.hInstance) {
|
||||
FreeMUILibrary(hLangResourceContainer);
|
||||
}
|
||||
if (Globals.hLngResContainer != Globals.hInstance) {
|
||||
HINSTANCE const _hLngResContainer = Globals.hLngResContainer;
|
||||
Globals.hLngResContainer = Globals.hInstance;
|
||||
MUI_LanguageDLLs[0].bIsActive = true;
|
||||
FreeMUILibrary(_hLngResContainer);
|
||||
}
|
||||
for (int i = 0; i < MuiLanguages_CountOf(); ++i) {
|
||||
MUI_LanguageDLLs[i].bIsLoaded = false;
|
||||
for (int i = 1; i < MuiLanguages_CountOf(); ++i) {
|
||||
MUI_LanguageDLLs[i].bIsActive = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -24,7 +24,7 @@ typedef struct _muilanguage
|
||||
// !!! WARNING: LCID is DEPRECATED
|
||||
LANGID LangId; // just for historic reasons
|
||||
bool bHasDLL;
|
||||
bool bIsLoaded;
|
||||
bool bIsActive;
|
||||
|
||||
} MUILANGUAGE, *PMUILANGUAGE;
|
||||
|
||||
@ -32,8 +32,8 @@ extern MUILANGUAGE MUI_LanguageDLLs[];
|
||||
int MuiLanguages_CountOf();
|
||||
|
||||
|
||||
HMODULE LoadLanguageResources(LANGID* pPrefLanguageID);
|
||||
void FreeLanguageResources(HMODULE hLangResourceContainer);
|
||||
LANGID LoadLanguageResources();
|
||||
void FreeLanguageResources();
|
||||
|
||||
int LoadLngStringW(UINT uID, LPWSTR lpBuffer, int nBufferMax);
|
||||
int LoadLngStringA(UINT uID, LPSTR lpBuffer, int nBufferMax);
|
||||
|
||||
@ -533,8 +533,7 @@ static void _CleanUpResources(const HWND hwnd, bool bIsInitialized)
|
||||
DestroyMenu(Globals.hMainMenu);
|
||||
}
|
||||
|
||||
FreeLanguageResources(Globals.hLngResContainer);
|
||||
Globals.hLngResContainer = NULL;
|
||||
FreeLanguageResources();
|
||||
|
||||
if (s_hRichEdit) {
|
||||
FreeLibrary(s_hRichEdit);
|
||||
@ -638,8 +637,8 @@ int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance,
|
||||
// ----------------------------------------------------
|
||||
// MultiLingual
|
||||
//
|
||||
Globals.iPrefLANGID = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US);
|
||||
Globals.hLngResContainer = LoadLanguageResources(&Globals.iPrefLANGID);
|
||||
//Globals.iPrefLANGID = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US);
|
||||
Globals.iPrefLANGID = LoadLanguageResources();
|
||||
|
||||
// ----------------------------------------------------
|
||||
|
||||
@ -2910,7 +2909,7 @@ LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam)
|
||||
|
||||
for (int lng = 0; lng < MuiLanguages_CountOf(); ++lng) {
|
||||
//EnableCmd(hmenu, MUI_LanguageDLLs[lng].rid, MUI_LanguageDLLs[lng].bHasDLL);
|
||||
CheckCmd(hmenu, MUI_LanguageDLLs[lng].rid, MUI_LanguageDLLs[lng].bIsLoaded);
|
||||
CheckCmd(hmenu, MUI_LanguageDLLs[lng].rid, MUI_LanguageDLLs[lng].bIsActive);
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
@ -2929,7 +2928,7 @@ static bool _DynamicLanguageMenuCmd(int cmd)
|
||||
if ((iLngIdx < 0) || (iLngIdx >= MuiLanguages_CountOf())) {
|
||||
return false;
|
||||
}
|
||||
if (!MUI_LanguageDLLs[iLngIdx].bIsLoaded)
|
||||
if (!MUI_LanguageDLLs[iLngIdx].bIsActive)
|
||||
{
|
||||
if (IsWindow(Globals.hwndDlgFindReplace)) {
|
||||
SendMessage(Globals.hwndDlgFindReplace, WM_CLOSE, 0, 0);
|
||||
@ -2942,10 +2941,9 @@ static bool _DynamicLanguageMenuCmd(int cmd)
|
||||
IniSetString(L"Settings2", L"PreferredLanguageLocaleName", Settings2.PreferredLanguageLocaleName);
|
||||
|
||||
DestroyMenu(Globals.hMainMenu);
|
||||
FreeLanguageResources(Globals.hLngResContainer);
|
||||
|
||||
Globals.iPrefLANGID = MUI_LanguageDLLs[iLngIdx].LangId;
|
||||
Globals.hLngResContainer = LoadLanguageResources(&Globals.iPrefLANGID);
|
||||
FreeLanguageResources();
|
||||
Globals.iPrefLANGID = LoadLanguageResources();
|
||||
Globals.hMainMenu = LoadMenu(Globals.hLngResContainer, MAKEINTRESOURCE(IDR_MUI_MAINMENU));
|
||||
if (!Globals.hMainMenu) {
|
||||
GetLastErrorToMsgBox(L"LoadMenu()", 0);
|
||||
|
||||
@ -266,7 +266,7 @@ typedef struct _globals_t
|
||||
{
|
||||
HINSTANCE hInstance;
|
||||
HINSTANCE hPrevInst;
|
||||
HMODULE hLngResContainer;
|
||||
HINSTANCE hLngResContainer;
|
||||
int iAvailLngCount;
|
||||
bool bPrefLngNotAvail;
|
||||
HWND hwndMain;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user