// // internat.h // #ifndef INTERNAT_H #define INTERNAT_H #include "private.h" #include "commctrl.h" #include "regsvr.h" #include "inatlib.h" #include "cregkey.h" void UninitINAT(); //----------------------------------------------------------------------------- // // INTERNAT Icon APIs // //----------------------------------------------------------------------------- // // For Keyboard Layout info. NT4 // typedef struct { DWORD dwID; // numeric id UINT iSpecialID; // i.e. 0xf001 for dvorak etc WCHAR wszText[64]; } LAYOUT, *LPLAYOUT; typedef struct { UINT idx ; char chars[4]; } INATSYMBOL; int GetLocaleInfoString(LCID lcid, LCTYPE lcType, char *psz, int cch); ULONG GetLocaleInfoString(HKL hKL, WCHAR *pszRegText, int nSize); int GetHKLDesctription(HKL hKL, WCHAR *pszDesc, int cchDesc, WCHAR *pszIMEFile, int cchIMEFile); HICON InatCreateIcon(WORD langID ); HICON InatCreateIconBySize(WORD langID, int cxSmIcon, int cySmIcon, LOGFONT *plf); HICON GetIconFromFile(int cx, int cy, WCHAR *lpszFileName, UINT uIconIndex); HICON GetIconFromFileA(int cx, int cy, char *lpszFileName, UINT uIconIndex); //----------------------------------------------------------------------------- // // MLNGINFO APIs // //----------------------------------------------------------------------------- typedef struct { HKL hKL; BOOL fInitDesc; BOOL fInitIcon; void SetDesc(WCHAR *psz) { StringCchCopyW(szDesc, ARRAYSIZE(szDesc), psz); } WCHAR *GetDesc() { if (!fInitDesc) InitDesc(); return szDesc; } int GetIconIndex() { if (!fInitIcon) InitIcon(); return nIconIndex; } void ClearIconIndex() { fInitIcon = FALSE; nIconIndex = -1; } void InitDesc(); void InitIcon(); private: int nIconIndex; WCHAR szDesc[128]; } MLNGINFO; HIMAGELIST GetMlngImageList(); BOOL GetMlngInfo(int n, MLNGINFO *pmlInfo); int GetMlngInfoByhKL(HKL hKL, MLNGINFO *pmlInfo); void ClearMlngIconIndex(); //----------------------------------------------------------------------------- // // IconList APIs // //----------------------------------------------------------------------------- BOOL EnsureIconImageList(); UINT InatAddIcon(HICON hIcon); BOOL InatGetIconSize(int *pcx, int *pcy); BOOL InatGetImageCount(); void InatRemoveAll(); //----------------------------------------------------------------------------- // // HKLAPIs // //----------------------------------------------------------------------------- HKL GetSystemDefaultHKL(); BOOL SetSystemDefaultHKL(HKL hKL); UINT GetPreloadListForNT(DWORD *pdw, UINT uBufSize); DWORD GetSubstitute(HKL hKL); #ifdef LATER_TO_CHECK_DUMMYHKL void RemoveFEDummyHKLFromPreloadReg(HKL hkl, BOOL fDefaultUser); void RemoveFEDummyHKLs(); #endif LATER_TO_CHECK_DUMMYHKL ///////////////////////////////////////////////////////////////////////////// // // CRegUIName // ///////////////////////////////////////////////////////////////////////////// class CRegKeyMUI : public CMyRegKey { public: LONG QueryValueCch(LPTSTR szValue, LPCTSTR lpszValueName, ULONG cchValue) { LONG lRes; LPTSTR lpValue; DWORD index; WCHAR szTmpW[MAX_PATH]; lRes = CMyRegKey::QueryValueCch(szValue, lpszValueName, cchValue); if (lRes != S_OK || szValue[0] != '@') return lRes; lpValue = szValue; index = 0; while (*lpValue != '\0' && index < cchValue) { if (*lpValue == ',') { lRes = SHLoadRegUIStringW(m_hKey, AtoW(lpszValueName), szTmpW, ARRAYSIZE(szTmpW)); StringCchCopy(szValue, cchValue, WtoA(szTmpW, ARRAYSIZE(szTmpW))); break; } lpValue++; index++; } return lRes; } LONG QueryValueCchW(WCHAR *szValue, const WCHAR *lpszValueName, ULONG cchValue) { LONG lRes; LPWSTR lpValue; DWORD index; lRes = CMyRegKey::QueryValueCchW(szValue, lpszValueName, cchValue); if (lRes != S_OK || szValue[0] != L'@') return lRes; lpValue = szValue; index = 0; while (*lpValue && index < cchValue) { if (*lpValue == L',') { lRes = SHLoadRegUIStringW(m_hKey, lpszValueName, szValue, cchValue); break; } lpValue++; index++; } return lRes; } LONG QueryMUIValueW(WCHAR *szValue, const WCHAR *lpszValueName, const WCHAR *lpszMUIName, ULONG cchValue) { LONG lRes; lRes = SHLoadRegUIStringW(m_hKey, lpszMUIName, szValue, cchValue); if (lRes == S_OK) { return lRes; } else { return CMyRegKey::QueryValueCchW(szValue, lpszValueName, cchValue); } } }; #endif // INTERNAT_H