UC5IMD.H
上传用户:wymy58
上传日期:2007-01-07
资源大小:2086k
文件大小:3k
源码类别:

DirextX编程

开发平台:

Visual C++

  1. // Copyright (C) 1996, 1998-1999 DXGuide.  All Rights Reserved.
  2. // File: UC5IMD.h
  3. #ifndef _UC5IMD__H
  4. #define _UC5IMD__H
  5. #if _MSC_VER >= 1000
  6. #pragma once
  7. #endif // _MSC_VER >= 1000
  8. const WORD constMaxInputCodeLen = 12;
  9. const WORD constMaxInputCharSetLen = 64;
  10. const WORD constMaxInputMethodNameLen = 8;
  11. const UINT constIMDHzFileOffset = 0x80; // In ucdos 5.0
  12. const WORD constIMD_ID_Len = 0x20; // In ucdos 5.0
  13. const WORD constMaxDispBufLen = 52;
  14. const WORD constMaxPageInfoBufSize = 400;
  15. const WORD constMaxFileCacheSize = 512;
  16. #ifndef _GUI_
  17. class CPackFile;
  18. class CPackFileManager;
  19. class CDIKeyState;
  20. #endif // _GUI_
  21. class CUC5IMD
  22. {
  23. friend class CIMDManager;
  24. friend class CDXIMDBar;
  25. public:
  26. CUC5IMD(void);
  27. ~CUC5IMD();
  28. protected:
  29. short m_errorCode;
  30. // Get from IMD File
  31. char m_pInputMethodName[constMaxInputMethodNameLen + 1];
  32. char m_pInputCharSet[constMaxInputCharSetLen + 1];
  33. int m_nInputCharSetLen;
  34. char m_charQuery;
  35. BYTE m_nSelectKeyOrder;
  36. int m_nMaxCodeLen;
  37. bool m_bAutoSelect;
  38. bool m_bFuzzyLookup;
  39. WORD m_wIMDHzIndexOffset;
  40. WORD m_wIMDHzIndexLen;
  41. WORD m_wOneHzCodeLen;
  42. BYTE* m_pIMDHzIndexBuf;
  43. bool m_bMustMaxLenDispDupCode;
  44. int m_nInputCharCount;
  45. bool m_bIMDProcKey;
  46. bool m_bDupBufShow;
  47. int m_nCurPageNo;
  48. int m_nCurPageDupNum;
  49. BYTE m_nMaxPageDupNum; // should be const number !!!
  50. BYTE* m_pIMDCodeIndexBuf;
  51. char m_pCodeBuf[constMaxInputCodeLen];
  52. char m_pDispBuf[constMaxDispBufLen + 1];
  53. BYTE m_pCurCodeBuf[constMaxInputCodeLen];
  54. BYTE* m_pIndexCurCodeBuf;
  55. BYTE m_pPageInfoBuf[constMaxPageInfoBufSize];
  56. short m_nIMDIndexBufBegOffset;
  57. short m_nIMDIndexBufEndOffset;
  58. long m_lIMDFileOffset;
  59. WORD m_wIMDSameCodeBegOffset;
  60. WORD m_wIMDSameCodeEndOffset;
  61. bool m_bFuzzyGet;
  62. public:
  63. #ifndef _GUI_
  64. bool Load(LPCTSTR  lpszFileName,
  65. CPackFileManager*  pPackFileManager = NULL,
  66. BYTE  byteFuncKey = 0xFF);
  67. #endif // _GUI_
  68. bool Load(WORD  wResID, LPCTSTR  lpType = NULL, BYTE  byteFuncKey = 0xFF);
  69. protected:
  70. bool Load(BYTE  byteFuncKey = 0xFF);
  71. public:
  72. void Error(short  errCode);
  73. bool GetHzCode(LPCTSTR  lpHz, CString&  strCode);
  74. bool GetHzFirstCode(LPCTSTR  lpHz, CString&  strCode);
  75. void GetFirstDupBuf(void);
  76. void GetNextDupBuf(void);
  77. bool SelectHZ(BYTE  byteIndex, char*  pOutBuf);
  78. bool PageNext(void);
  79. bool PagePrev(void);
  80. #ifndef _GUI_
  81. virtual bool OnKeyDown(CDIKeyState*  pKeyState,
  82. char*  pOutBuf, bool&  bDispDupBuf, bool&  bSelected);
  83. #endif // _GUI_
  84. void SaveCurPageInfo(int  nPageNo);
  85. void GetCurPageInfo(int  nPageNo);
  86. void CalcSameCodeEndOffset(int  nIndexBufBegOffset);
  87. void SetDispBufLen(WORD  wDispBufLen)
  88. {
  89. if (wDispBufLen < constMaxDispBufLen)
  90. m_wDispBufLen = wDispBufLen;
  91. }
  92. protected:
  93. void Beep(void);
  94. public:
  95. enum
  96. {
  97. ERR_NOERR,
  98. ERR_OPEN_IMD,
  99. ERR_READ_IMD,
  100. ERR_INVALID_IMD,
  101. ERR_USER
  102. };
  103. protected:
  104. static const CString m_strDefaultIMDTypeName;
  105. static const CString m_strIMDID;
  106. static const CString m_pStrIMDError[ERR_USER];
  107. WORD m_wDispBufLen;
  108. private:
  109. WORD GetAltFuncKeyCode(BYTE  ch);
  110. WORD GetCharSetIndex(BYTE  ch);
  111. BYTE GetIMDByte(void);
  112. private:
  113. long m_lCacheBegOffset;
  114. BYTE m_aFileCache[constMaxFileCacheSize];
  115. protected:
  116. union
  117. {
  118. #ifndef _GUI_
  119. CPackFile* m_pPackFile;
  120. #endif // _GUI
  121. CFile* m_pFile;
  122. };
  123. #ifndef _GUI_
  124. bool m_bUsePackFile;
  125. #endif // _GUI
  126. };
  127. #endif // _UC5IMD__H