+/**
+ * @brief Load a string from resource.
+ * @param [in] Resource string ID.
+ * @return String loaded from resource.
+ */
+String CWinMergeShell::GetResourceString(UINT resourceID)
+{
+ if (!s_pLang)
+ s_pLang = new CLanguageSelect();
+ if (s_pLang->GetLangId() != m_langID)
+ {
+ TCHAR szFileName[1024] = {0};
+ GetModuleFileName(_AtlComModule.m_hInstTypeLib, szFileName, sizeof(szFileName) / sizeof(TCHAR));
+ PathRemoveFileSpec(szFileName);
+ String languagesFolder = String(szFileName) + _T("\\Languages\\ShellExtension");
+ s_pLang->LoadLanguageFile(m_langID, languagesFolder);
+ }
+ TCHAR resStr[1024] = {0};
+ int res = LoadString(_AtlComModule.m_hInstTypeLib, resourceID, resStr, 1024);
+ ATLASSERT(res != 0);
+ String strResource;
+ s_pLang->TranslateString(resStr, strResource);
+ return strResource;
+}
+
+BOOL CWinMergeShell::InsertMenuString(HMENU hMenu, UINT uPosition, UINT uIDNewItem, UINT uStringId)
+{
+ String str = GetResourceString(uStringId);
+ MENUITEMINFO mii{sizeof mii};
+ mii.fMask = MIIM_ID | MIIM_STRING | MIIM_DATA;
+ mii.wID = uIDNewItem;
+ mii.dwTypeData = const_cast<LPTSTR>(str.c_str());
+ mii.dwItemData = uStringId;
+ return InsertMenuItem(hMenu, uPosition, TRUE, &mii);
+}
+