HZspecial.c
上传用户:szljw888
上传日期:2010-04-11
资源大小:124k
文件大小:4k
源码类别:

输入法编程

开发平台:

C/C++

  1. /* 大熊猫输入法(Free Chinese Input)  由YJMSIR(yjmsir@163.com)编写
  2.  * 协议: GPL
  3.  * freeinput( A Chinese Input Method) by YJMSIR(yjmsir@163.com)
  4.  * Licence: GPL 
  5.  */
  6. #include "freepy.h"
  7. BOOL ReturnWuBicode(HIMC hIMC)
  8. {
  9.     LPINPUTCONTEXT lpIMC;
  10.     LPCOMPOSITIONSTRING lpCompStr;
  11. LPTSTR lpPreResultStr,lpStr;
  12.     lpIMC = ImmLockIMC(hIMC);
  13. lpCompStr = (LPCOMPOSITIONSTRING)ImmLockIMCC(lpIMC->hCompStr);
  14. lpPreResultStr = ((LPMYCOMPSTR)lpCompStr)->FreePYComp.szPreResultStr;
  15. if( _tcslen(lpPreResultStr)){
  16. lpStr = ((LPMYCOMPSTR)lpCompStr)->FreePYComp.szPaintCompStr;
  17. _tcscpy(lpStr,lpPreResultStr);
  18. //_tcscat(lpStr,_T(" 五笔:"));
  19. _tcscat(lpStr,_T(" "));
  20. _tcscat(lpStr,StatusDisplay[CONVERSION_MODE_WUBI]);
  21. if(FindWuBiCodeWhole(lpPreResultStr))
  22. _tcscat(lpStr,YJMMessage);
  23. if(FindPYSWhole(lpPreResultStr)){
  24. //_tcscat(lpStr,_T("拼音:"));
  25. _tcscat(lpStr,_T(" "));
  26. _tcscat(lpStr,StatusDisplay[CONVERSION_MODE_PINYIN]);
  27. _tcscat(lpStr,YJMMessage);
  28. }
  29. _tcscpy(lpPreResultStr,"");
  30. MessageBox(NULL,lpStr,_T("编码查询结果"),MB_OK);
  31. ImmUnlockIMCC(lpIMC->hCompStr);
  32.     ImmUnlockIMC(hIMC);
  33. return TRUE;
  34. }
  35. ImmUnlockIMCC(lpIMC->hCompStr);
  36.     ImmUnlockIMC(hIMC);
  37. return FALSE;
  38. }
  39. BOOL RepeatPreResult(HIMC hIMC)
  40. {
  41.     LPINPUTCONTEXT lpIMC;
  42.     LPCOMPOSITIONSTRING lpCompStr;
  43. LPTSTR lpPreResultStr,lpConvStr;
  44.     lpIMC = ImmLockIMC(hIMC);
  45. lpCompStr = (LPCOMPOSITIONSTRING)ImmLockIMCC(lpIMC->hCompStr);
  46. lpPreResultStr = ((LPMYCOMPSTR)lpCompStr)->FreePYComp.szPreResultStr;
  47. if( _tcslen(lpPreResultStr) ){
  48. lpConvStr = ((LPMYCOMPSTR)lpCompStr)->FreePYComp.szConvCompStr;
  49. _tcscpy(lpConvStr,lpPreResultStr);
  50. MakeResultString(hIMC,TRUE);
  51. ImmUnlockIMCC(lpIMC->hCompStr);
  52.     ImmUnlockIMC(hIMC);
  53. return TRUE;
  54. }
  55. ImmUnlockIMCC(lpIMC->hCompStr);
  56.     ImmUnlockIMC(hIMC);
  57. return FALSE;
  58. }
  59. //产生符号
  60. BOOL GeneratePunct(HIMC hIMC, WORD wCode)
  61. {
  62.     LPINPUTCONTEXT lpIMC;
  63.     LPCOMPOSITIONSTRING lpCompStr;
  64. LPTSTR lpStr,lpConvStr,lpPreResultStr;
  65. WORD wHead,wLength;
  66. TCHAR cLastPreResultChar,MiddleResult[10];
  67. static BOOL i;
  68.     lpIMC = ImmLockIMC(hIMC);
  69. lpCompStr = (LPCOMPOSITIONSTRING)ImmLockIMCC(lpIMC->hCompStr);
  70. lpCompStr->dwCompStrLen = 0;
  71. lpConvStr = ((LPMYCOMPSTR)lpCompStr)->FreePYComp.szConvCompStr;
  72. wLength=_tcslen(lpConvStr);
  73. //如果设置中文标点
  74. if(wConversionSet & CONVERSION_SET_PUNCT) {
  75. wHead = wCode - _T('!');
  76. //lpStr = aPunct[wHead][0];
  77. lpStr = aPunct+32*40*wHead;
  78. _tcscpy(MiddleResult,lpStr);
  79. if( _tcslen(lpStr) ){
  80. //对./的处理,对大键盘数字可以正确处理,对小键盘还不能正确处理。
  81. if( wCode == _T('.') || wCode == _T('/') ) {
  82. lpPreResultStr = ((LPMYCOMPSTR)lpCompStr)->FreePYComp.szPreResultStr;
  83. cLastPreResultChar = *CharPrev(lpPreResultStr,lpPreResultStr + _tcslen(lpPreResultStr));
  84. //if(cLastPreResultChar >= _T('!') && cLastPreResultChar <= _T('~') ) {
  85. if(cLastPreResultChar >= _T('0') && cLastPreResultChar <= _T('9') ||( VK_OEM_1 <= cLastPreResultChar && VK_OEM_9 >= cLastPreResultChar )) {
  86. *MiddleResult = (TCHAR)wCode;
  87. *(MiddleResult+1) = _T('');
  88. }
  89. else _tcscpy(MiddleResult,lpStr);
  90. }
  91. //单引号的处理
  92. else if( wCode == _T(''')){
  93. i=!i;
  94. _tcscpy(MiddleResult,i?_T("‘"):_T("’"));
  95. }
  96. //双引号的处理
  97. else if( wCode == _T('"')){
  98. i=!i;
  99. _tcscpy(MiddleResult,i?_T("“"):_T("”"));
  100. }
  101. if(wLength==0)_tcscpy(lpConvStr,MiddleResult);
  102. else _tcscat(lpConvStr,MiddleResult);
  103. //DebugLog(2,(DebugLogFile,"lpConvStr: %s  MiddleResult:%sn",lpConvStr,MiddleResult));
  104. MakeResultString(hIMC,TRUE);
  105. ImmUnlockIMCC(lpIMC->hCompStr);
  106. ImmUnlockIMC(hIMC);
  107. return TRUE;
  108. }
  109. }
  110. else {
  111. *lpConvStr = (TCHAR)wCode;
  112. *(lpConvStr+1) = _T('');
  113. MakeResultString(hIMC,TRUE);
  114. ImmUnlockIMCC(lpIMC->hCompStr);
  115. ImmUnlockIMC(hIMC);
  116. return TRUE;
  117. }
  118. ImmUnlockIMCC(lpIMC->hCompStr);
  119.     ImmUnlockIMC(hIMC);
  120. return FALSE;
  121. }