HZspecial.c
上传用户:shdz666
上传日期:2007-01-03
资源大小:566k
文件大小:3k
源码类别:

输入法编程

开发平台:

Visual C++

  1. /*
  2.  * Copyright (C) 1999.4  Li ZhenChun
  3.  *
  4.  * This program is free software; you can redistribute it and/or modify
  5.  * it under the terms of the GNU General Public License as published by
  6.  * the Free Software Foundation; either version 2 of the License; or
  7.  * (at your option) any later version.
  8.  *
  9.  * This program is distributed in the hope that is will be useful, but
  10.  * WITHOUT ANY WARRANTY; without even the implied warranty of 
  11.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12.  * General Public License for more details.
  13.  *
  14.  * You should have received a copy of the GNU General Public License
  15.  * along with this program; if not, write to the Free Software
  16.  * Foundation, Inc., 675 Mass Ave, Cambridge, M A 02139, USA.
  17.  *
  18.  * Author: Li ZhenChun  email: zhchli@163.net or zhchli@126.com
  19.  * 
  20.  */
  21. #include "freepy.h"
  22. BOOL RepeatPreResult(HIMC hIMC)
  23. {
  24.     LPINPUTCONTEXT lpIMC;
  25.     LPCOMPOSITIONSTRING lpCompStr;
  26.     GENEMSG GnMsg;
  27. LPTSTR lpPreResultStr;
  28. wConversionMode = 0;
  29.     lpIMC = ImmLockIMC(hIMC);
  30. lpCompStr = (LPCOMPOSITIONSTRING)ImmLockIMCC(lpIMC->hCompStr);
  31. lpPreResultStr = ((LPMYCOMPSTR)lpCompStr)->FreePYComp.szPreResultStr;
  32. if( _tcslen(lpPreResultStr) ){
  33. _tcscpy(GETLPRESULTSTR(lpCompStr),lpPreResultStr);
  34. lpCompStr->dwResultStrLen = _tcslen(lpPreResultStr);
  35. lpCompStr->dwCompStrLen = 0;
  36. GnMsg.msg = WM_IME_COMPOSITION;
  37. GnMsg.wParam = 0;
  38. GnMsg.lParam = GCS_RESULTSTR;
  39. GenerateMessage(hIMC, lpdwCurTransKey,(LPGENEMSG)&GnMsg);
  40. GnMsg.msg = WM_IME_ENDCOMPOSITION;
  41. GnMsg.wParam = 0;
  42. GnMsg.lParam = 0;
  43. GenerateMessage(hIMC,  lpdwCurTransKey,(LPGENEMSG)&GnMsg);
  44. ImmUnlockIMCC(lpIMC->hCompStr);
  45.     ImmUnlockIMC(hIMC);
  46. return TRUE;
  47. }
  48. ImmUnlockIMCC(lpIMC->hCompStr);
  49.     ImmUnlockIMC(hIMC);
  50. return FALSE;
  51. }
  52. BOOL GeneratePunct(HIMC hIMC, WORD wCode)
  53. {
  54.     LPINPUTCONTEXT lpIMC;
  55.     LPCOMPOSITIONSTRING lpCompStr;
  56. LPTSTR lpStr,lpConvStr,lpPreResultStr;
  57. WORD wHead;
  58. TCHAR cLastPreResultChar;
  59.     lpIMC = ImmLockIMC(hIMC);
  60. lpCompStr = (LPCOMPOSITIONSTRING)ImmLockIMCC(lpIMC->hCompStr);
  61. lpCompStr->dwCompStrLen = 0;
  62. lpConvStr = ((LPMYCOMPSTR)lpCompStr)->FreePYComp.szConvCompStr;
  63. if(wConversionSet & CONVERSION_SET_PUNCT) {
  64. wHead = wCode - _T('!');
  65. lpStr = aPunct[wHead][0];
  66. if( _tcslen(lpStr) ){
  67. if( wCode == _T('.') || wCode == _T('/') ) {
  68. lpPreResultStr = ((LPMYCOMPSTR)lpCompStr)->FreePYComp.szPreResultStr;
  69. cLastPreResultChar = *CharPrev(lpPreResultStr,lpPreResultStr + _tcslen(lpPreResultStr));
  70. if(cLastPreResultChar >= _T('!') && cLastPreResultChar <= _T('~') ) {
  71. *lpConvStr = (TCHAR)wCode;
  72. *(lpConvStr+1) = _T('');
  73. }
  74. else _tcscpy(lpConvStr,lpStr);
  75. }
  76. else _tcscpy(lpConvStr,lpStr);
  77. MakeResultString(hIMC,TRUE);
  78. ImmUnlockIMCC(lpIMC->hCompStr);
  79. ImmUnlockIMC(hIMC);
  80. return TRUE;
  81. }
  82. }
  83. else {
  84. *lpConvStr = (TCHAR)wCode;
  85. *(lpConvStr+1) = _T('');
  86. MakeResultString(hIMC,TRUE);
  87. ImmUnlockIMCC(lpIMC->hCompStr);
  88. ImmUnlockIMC(hIMC);
  89. return TRUE;
  90. }
  91. ImmUnlockIMCC(lpIMC->hCompStr);
  92.     ImmUnlockIMC(hIMC);
  93. return FALSE;
  94. }