Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

217 lines
5.1 KiB

//
// 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