windows-nt/Source/XPSP1/NT/enduser/stuff/hhctrl/unicode.h
2020-09-26 16:20:57 +08:00

136 lines
4.1 KiB
C++

// unicode.h - Unicode functions that work on all 32-bit Window platform
#pragma once
#ifndef __UNICODE_H__
#define __UNICODE_H__
// C/C++ differences
#ifndef INLINE
#ifdef __cplusplus
#define INLINE inline
#else
#define INLINE __inline
#endif
#endif
#define CP_UNICODE 1200 // Unicode
#define IN_RANGE(v, r1, r2) ((r1) <= (v) && (v) <= (r2))
//====================
// From VS6 minar.h
//====================
class CBufImpl
{
private:
BYTE * m_pData;
int m_cb;
HRESULT _SetByteSize (int cb);
public:
CBufImpl() : m_pData(NULL), m_cb(0) {}
~CBufImpl() { Clear(); }
void Clear ();
HRESULT SetByteSize (int cb);
HRESULT SetByteSizeShrink (int cb);
int GetByteSize () { return m_cb; }
BYTE * ByteData () { return m_pData; }
};
inline HRESULT CBufImpl::SetByteSize (int cb)
{
if (cb <= m_cb)
return S_OK;
return _SetByteSize(cb);
}
//---------------------------------------------------------------
template <class T> class CMinimalArray : public CBufImpl
{
public:
HRESULT SetSize (int cel) { return SetByteSize(cel*sizeof(T)); }
HRESULT SetSizeShrink (int cel) { return SetByteSizeShrink(cel*sizeof(T)); }
int Size () { return GetByteSize()/sizeof(T); }
operator T* () { return (T*)ByteData(); }
T* GetData () { return (T*)ByteData(); }
};
//====================
// From VS6 intlutil.h
//====================
/////////////////////////////////////////////////////////////////
// GetDefaultFont - Get default monospaced font for a codepage
//
// IN cp Codepage -- usually result of GetACP().
// IN plf Address of uninitialized LOGFONT structure.
// OUT plf Fully initialized LOGFONT struct.
//
void GetDefaultFont(UINT cp, LOGFONT * plf, BYTE *pbySize);
BOOL IsStringDisplayable(const char *pszString, UINT codepage);
/////////////////////////////////////////////////////////////////
// locale/codepage mappings
//
#define LCIDCP_CURRENT (2)
#define LCIDCP_GUESSED (1)
#define LCIDCP_UNKNOWN (0)
int WINAPI LCIDFromCodePage(UINT cp, LCID * plcid);
UINT WINAPI CodePageFromLCID(LCID lcid);
UINT WINAPI CodepageFromCharset(BYTE cs);
BOOL WINAPI IsSupportedFontCodePage(UINT cp);
BOOL WINAPI IsDbcsGdi ();
BOOL WINAPI IsWin95OrLess ();
BOOL WINAPI IsNT ();
BOOL WINAPI WideAPIHack ();
UINT WINAPI GetFontCodePage (HDC hdc);
BOOL IntlGetTextExtentPoint32W (HDC hdc, LPCWSTR lpString, int cbString, LPSIZE lpSize, UINT *pCP = NULL);
BOOL IntlExtTextOutW (HDC hdc, int X, int Y, UINT fuOptions, CONST RECT *lprc, LPCWSTR lpString, UINT cbCount, CONST INT *lpDx, UINT *pCP = NULL);
BOOL IntlTextOutW(HDC hdc, int nXStart, int nYStart, LPCWSTR lpString, int cbString, UINT *pCP = NULL);
BOOL IntlGetTextExtentExPointW(HDC hdc, LPCWSTR lpString, int cbString, int nMaxExtent, LPINT lpnFit, LPINT alpDx, LPSIZE lpSize, UINT *pCP = NULL);
BOOL HxAppendMenu(HMENU hMenu, UINT uFlags, UINT uIDNewItem, LPCTSTR lpNewItem);
BOOL HxSetWindowText(HWND hWnd, LPCTSTR lpString);
BOOL IntlExtTextOut( HDC hdc, int X, int Y, UINT fuOptions, CONST RECT *lprc, LPCWSTR lpString, UINT cbCount, CONST INT *lpDx, UINT* pCP );
inline BOOL IntlTextOutW (HDC hdc, int nXStart, int nYStart, LPCWSTR lpString, int cch, UINT *pCP)
{
// WARNING: this is not completely generic.
// This does work for the ways we use TextOut.
return IntlExtTextOutW(hdc, nXStart, nYStart, 0, NULL, lpString, cch, NULL, pCP);
}
inline BOOL IsImeLanguage(LANGID wLang)
{
wLang = PRIMARYLANGID(wLang);
if (LANG_NEUTRAL == wLang) return FALSE;
if (LANG_ENGLISH == wLang) return FALSE;
if (LANG_JAPANESE == wLang) return TRUE;
if (LANG_KOREAN == wLang) return TRUE;
if (LANG_CHINESE == wLang) return TRUE;
return FALSE;
}
inline BOOL IsImeCharSet(BYTE charset)
{
if (ANSI_CHARSET == charset) return FALSE;
if (SHIFTJIS_CHARSET == charset) return TRUE;
if (GB2312_CHARSET == charset) return TRUE;
if (CHINESEBIG5_CHARSET == charset) return TRUE;
if (HANGEUL_CHARSET == charset) return TRUE;
if (JOHAB_CHARSET == charset) return TRUE;
return FALSE;
}
#endif // __UNICODE_H__