mlmain.h
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 8k
Category:

Windows Kernel

Development Platform:

Visual C++

  1. // MLMain.h : Declaration of the CMultiLanguage
  2. #ifndef __MLMAIN_H_
  3. #define __MLMAIN_H_
  4. #include "mlflink.h"
  5. #include "mllbcons.h"
  6. /////////////////////////////////////////////////////////////////////////////
  7. // CMultiLanguage
  8. class ATL_NO_VTABLE CMultiLanguage : 
  9.     public CComObjectRoot,
  10.     public CComCoClass<CMultiLanguage, &CLSID_CMultiLanguage>,
  11.     public IMultiLanguage
  12. {
  13.     MIMECONTF       dwMimeSource;
  14.     CMimeDatabase   *m_pMimeDatabase;
  15. public:
  16.     CMultiLanguage(void) 
  17.     {
  18.         m_pMimeDatabase = new CMimeDatabase;
  19.         dwMimeSource = MIMECONTF_MIME_IE4;
  20.         if (m_pMimeDatabase)
  21.             m_pMimeDatabase->SetMimeDBSource(MIMECONTF_MIME_IE4);
  22.     }
  23.     ~CMultiLanguage(void)
  24.     {
  25.         if (m_pMimeDatabase)
  26.             delete m_pMimeDatabase;
  27.     }
  28.     DECLARE_NO_REGISTRY()
  29.     BEGIN_COM_MAP(CMultiLanguage)
  30.         COM_INTERFACE_ENTRY(IMultiLanguage)
  31.         COM_INTERFACE_ENTRY_TEAR_OFF(IID_IMLangCodePages, CMLFLink)
  32.         COM_INTERFACE_ENTRY_TEAR_OFF(IID_IMLangFontLink, CMLFLink)
  33.         COM_INTERFACE_ENTRY_TEAR_OFF(IID_IMLangFontLink2, CMLFLink2)
  34.         COM_INTERFACE_ENTRY_TEAR_OFF(IID_IMultiLanguage2, CMultiLanguage2)
  35.         COM_INTERFACE_ENTRY_TEAR_OFF(IID_IMLangLineBreakConsole, CMLLBCons)
  36.     END_COM_MAP()
  37. public:
  38. // IMultiLanguage
  39.     virtual STDMETHODIMP GetNumberOfCodePageInfo(UINT *pcCodePage);
  40.     virtual STDMETHODIMP GetCodePageInfo(UINT uiCodePage, PMIMECPINFO pcpInfo);
  41.     virtual STDMETHODIMP GetFamilyCodePage(UINT uiCodePage, UINT *puiFamilyCodePage);
  42.     virtual STDMETHODIMP EnumCodePages(DWORD grfFlags, IEnumCodePage **ppEnumCodePage);
  43.     virtual STDMETHODIMP GetCharsetInfo(BSTR Charset, PMIMECSETINFO pcsetInfo);
  44.     virtual STDMETHODIMP IsConvertible(DWORD dwSrcEncoding, DWORD dwDstEncoding);
  45.     virtual STDMETHODIMP ConvertString(LPDWORD lpdwMode, DWORD dwSrcEncoding, DWORD dwDstEncoding, BYTE *pSrcStr, UINT *pcSrcSize, BYTE *pDstStr, UINT *pcDstSize);
  46.     virtual STDMETHODIMP ConvertStringToUnicode(LPDWORD lpdwMode, DWORD dwEncoding, CHAR *pSrcStr, UINT *pcSrcSize, WCHAR *pDstStr, UINT *pcDstSize);
  47.     virtual STDMETHODIMP ConvertStringFromUnicode(LPDWORD lpdwMode, DWORD dwEncoding, WCHAR *pSrcStr, UINT *pcSrcSize, CHAR *pDstStr, UINT *pcDstSize);
  48.     virtual STDMETHODIMP ConvertStringReset(void);
  49.     virtual STDMETHODIMP GetRfc1766FromLcid(LCID Locale, BSTR *pbstrRfc1766);
  50.     virtual STDMETHODIMP GetLcidFromRfc1766(PLCID pLocale, BSTR bstrRfc1766);
  51.     virtual STDMETHODIMP EnumRfc1766(IEnumRfc1766 **ppEnumRfc1766);
  52.     virtual STDMETHODIMP GetRfc1766Info(LCID Locale, PRFC1766INFO pRfc1766Info);
  53.     virtual STDMETHODIMP CreateConvertCharset(UINT uiSrcCodePage, UINT uiDstCodePage, DWORD dwProperty, IMLangConvertCharset **ppMLangConvertCharset);
  54. };
  55. class ATL_NO_VTABLE CMultiLanguage2 : 
  56.     public CComTearOffObjectBase<CMultiLanguage>,
  57.     public IMultiLanguage2
  58. {        
  59.     IMultiLanguage  * m_pIML;
  60.     MIMECONTF       dwMimeSource;
  61.     CMimeDatabase   * m_pMimeDatabase;
  62. public:
  63.     DECLARE_NO_REGISTRY()
  64.     BEGIN_COM_MAP(CMultiLanguage2)
  65.         COM_INTERFACE_ENTRY(IMultiLanguage2)
  66.     END_COM_MAP()
  67.     CMultiLanguage2(void);
  68.     ~CMultiLanguage2(void);
  69.     virtual STDMETHODIMP GetNumberOfCodePageInfo(UINT *pcCodePage);
  70.     virtual STDMETHODIMP GetCodePageInfo(UINT uiCodePage, LANGID LangId, PMIMECPINFO pcpInfo);
  71.     virtual STDMETHODIMP GetFamilyCodePage(UINT uiCodePage, UINT *puiFamilyCodePage);
  72.     virtual STDMETHODIMP EnumCodePages(DWORD grfFlags, LANGID LangId, IEnumCodePage **ppEnumCodePage);
  73.     virtual STDMETHODIMP GetCharsetInfo(BSTR Charset, PMIMECSETINFO pcsetInfo);
  74.     virtual STDMETHODIMP IsConvertible(DWORD dwSrcEncoding, DWORD dwDstEncoding)
  75.     {
  76.         if (m_pIML)
  77.             return m_pIML->IsConvertible(dwSrcEncoding, dwDstEncoding);
  78.         else
  79.             return E_FAIL;
  80.     }
  81.     virtual STDMETHODIMP ConvertString(LPDWORD lpdwMode, DWORD dwSrcEncoding, DWORD dwDstEncoding, BYTE *pSrcStr, UINT *pcSrcSize, BYTE *pDstStr, UINT *pcDstSize)
  82.     {
  83.         if (m_pIML)
  84.             return m_pIML->ConvertString(lpdwMode, dwSrcEncoding, dwDstEncoding, pSrcStr, pcSrcSize, pDstStr, pcDstSize);
  85.         else
  86.             return E_FAIL;
  87.     }
  88.     virtual STDMETHODIMP ConvertStringToUnicode(LPDWORD lpdwMode, DWORD dwEncoding, CHAR *pSrcStr, UINT *pcSrcSize, WCHAR *pDstStr, UINT *pcDstSize)
  89.     {
  90.         if (m_pIML)
  91.             return m_pIML->ConvertStringToUnicode(lpdwMode, dwEncoding, pSrcStr, pcSrcSize, pDstStr, pcDstSize);
  92.         else
  93.             return E_FAIL;
  94.     }
  95.     virtual STDMETHODIMP ConvertStringFromUnicode(LPDWORD lpdwMode, DWORD dwEncoding, WCHAR *pSrcStr, UINT *pcSrcSize, CHAR *pDstStr, UINT *pcDstSize)
  96.     {
  97.         if (m_pIML)
  98.             return m_pIML->ConvertStringFromUnicode(lpdwMode, dwEncoding, pSrcStr, pcSrcSize, pDstStr, pcDstSize);
  99.         else
  100.             return E_FAIL;
  101.     }
  102.     virtual STDMETHODIMP ConvertStringReset(void)
  103.     {
  104.         if (m_pIML)
  105.             return m_pIML->ConvertStringReset();
  106.         else
  107.             return E_FAIL;
  108.     }
  109.     virtual STDMETHODIMP GetRfc1766FromLcid(LCID Locale, BSTR *pbstrRfc1766)
  110.     {
  111.         if (m_pIML)
  112.             return m_pIML->GetRfc1766FromLcid(Locale, pbstrRfc1766);
  113.         else
  114.             return E_FAIL;
  115.     }
  116.     virtual STDMETHODIMP GetLcidFromRfc1766(PLCID pLocale, BSTR bstrRfc1766)
  117.     {
  118.         if (m_pIML)
  119.             return m_pIML->GetLcidFromRfc1766(pLocale, bstrRfc1766);
  120.         else
  121.             return E_FAIL;
  122.     }
  123.     virtual STDMETHODIMP EnumRfc1766(LANGID LangId, IEnumRfc1766 **ppEnumRfc1766);
  124.     virtual STDMETHODIMP GetRfc1766Info(LCID Locale, LANGID LangId, PRFC1766INFO pRfc1766Info);
  125.     virtual STDMETHODIMP CreateConvertCharset(UINT uiSrcCodePage, UINT uiDstCodePage, DWORD dwProperty, IMLangConvertCharset **ppMLangConvertCharset)
  126.     {
  127.         if (m_pIML)
  128.             return m_pIML->CreateConvertCharset(uiSrcCodePage, uiDstCodePage, dwProperty, ppMLangConvertCharset);
  129.         else
  130.             return E_FAIL;
  131.     }
  132.     virtual STDMETHODIMP ConvertStringInIStream(LPDWORD lpdwMode, DWORD dwFlag, WCHAR *lpFallBack, DWORD dwSrcEncoding, DWORD dwDstEncoding, IStream *pstmIn, IStream *pstmOut);
  133.     virtual STDMETHODIMP ConvertStringToUnicodeEx(LPDWORD lpdwMode, DWORD dwEncoding, CHAR *pSrcStr, UINT *pcSrcSize, WCHAR *pDstStr, UINT *pcDstSize, DWORD dwFlag=0, WCHAR *lpFallBack = NULL);
  134.     virtual STDMETHODIMP ConvertStringFromUnicodeEx(LPDWORD lpdwMode, DWORD dwEncoding, WCHAR *pSrcStr, UINT *pcSrcSize, CHAR *pDstStr, UINT *pcDstSize, DWORD dwFlag=0, WCHAR *lpFallBack = NULL);
  135.     virtual STDMETHODIMP DetectCodepageInIStream(DWORD dwFlag, DWORD uiPrefWinCodepage, IStream *pstmIn, DetectEncodingInfo *lpEncoding, INT *pnScores);
  136.     virtual STDMETHODIMP DetectInputCodepage(DWORD dwFlag, DWORD uiPrefWinCodepage, CHAR *pSrcStr, INT *pcSrcSize, DetectEncodingInfo *lpEncoding, INT *pnScores);
  137.     virtual STDMETHODIMP ValidateCodePage(UINT uiCodePage, HWND hwnd);
  138.     virtual STDMETHODIMP GetCodePageDescription(UINT uiCodePage, LCID lcid, LPWSTR lpWideCharStr,  int cchWideChar);
  139.     virtual STDMETHODIMP IsCodePageInstallable(UINT uiCodePage);
  140.     virtual STDMETHODIMP SetMimeDBSource(MIMECONTF dwSource);
  141.     virtual STDMETHODIMP GetNumberOfScripts(UINT *pnScripts);
  142.     virtual STDMETHODIMP EnumScripts(DWORD dwFlags, LANGID LangId, IEnumScript **ppEnumScript);
  143.     
  144.     virtual STDMETHODIMP ValidateCodePageEx(UINT uiCodePage, HWND hwnd, DWORD dwfIODControl);
  145. protected:
  146.     HRESULT EnsureIEStatus(void);
  147.     class CIEStatus
  148.     {
  149.     public:
  150.         CIEStatus(void) { _IEFlags.fJITDisabled = FALSE;}
  151.         HRESULT Init(void);
  152.         BOOL IsJITEnabled(void) 
  153.         { 
  154.             return !_IEFlags.fJITDisabled;
  155.         }
  156.     protected:
  157.         struct {
  158.             BOOL fJITDisabled:1;
  159.         } _IEFlags;
  160.     };
  161.     CIEStatus *m_pIEStat;
  162. };
  163. #endif //__MLMAIN_H_