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

输入法编程

开发平台:

C/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 CharHandlePhToCh( HIMC hIMC,WORD wParam,LONG lParam)
  23. {
  24. TCHAR YjmPressKey[2];
  25. YjmPressKey[0]=(char)wParam;
  26. YjmPressKey[1]='';
  27. //if( wParam >= _T('0') && wParam <= _T('9')|| ){//不断地分解
  28. if(_tcsstr(_T("0123456789;'/"),YjmPressKey)){
  29.     LPINPUTCONTEXT lpIMC;
  30. LPCANDIDATEINFO lpCandInfo;
  31. LPCANDIDATELIST lpCandList;
  32. LPCOMPOSITIONSTRING lpCompStr;
  33. WORD wIdx,wCount;
  34. TCHAR szCharArr[50][4];
  35. LPTSTR lpNextChar,lpStr,lpConvStr;
  36. GENEMSG GnMsg;
  37. int i;
  38. lpIMC = ImmLockIMC(hIMC);
  39. lpCandInfo = (LPCANDIDATEINFO)ImmLockIMCC(lpIMC->hCandInfo);
  40. lpCandList = (LPCANDIDATELIST)((LPSTR)lpCandInfo  + lpCandInfo->dwOffset[0]);
  41. lpCompStr = (LPCOMPOSITIONSTRING)ImmLockIMCC(lpIMC->hCompStr);
  42. if(wParam == (WORD)_T(';')) wIdx=1;
  43. else if(wParam == (WORD)_T(''')) wIdx=2;
  44. else if(wParam == (WORD)_T('/')) wIdx=2;
  45.     else if( wParam == (WORD)_T('0') ) wIdx=9;
  46. else wIdx = wParam - _T('1');
  47. wIdx += (WORD)lpCandList->dwPageStart;
  48. if( wIdx >= 2 && wIdx < lpCandList->dwCount+2){
  49. wCount = 0;
  50. lpStr = GETLPCANDSTR(lpCandList,wIdx);
  51. lpNextChar = CharNext(lpStr);
  52. while( lpStr != lpNextChar ){
  53. memcpy(szCharArr[wCount],lpStr,lpNextChar-lpStr);
  54. szCharArr[wCount++][lpNextChar-lpStr] = _T('');
  55. lpStr = lpNextChar;
  56. lpNextChar = CharNext(lpStr);
  57. }
  58. if( !wCount ) goto my_exit;
  59. if( wCount == 1){
  60. lpConvStr = ((LPMYCOMPSTR)lpCompStr)->FreePYComp.szConvCompStr;
  61. _tcscpy(lpConvStr,szCharArr[0]);
  62. MakeResultString(hIMC,TRUE);
  63. wConversionMode =wPreConversionMode;
  64. goto my_exit;//最后的出口
  65. }
  66. if( wCount > CAND_PAGESIZE ) wCount = CAND_PAGESIZE;//10
  67. lpCandList->dwCount = wCount;//只输出CAND_PAGESIZE个汉字//10
  68. lpCandList->dwPageStart = 2;
  69. lpCandList->dwPageSize = CAND_PAGESIZE;//10;
  70. for (i=0;i<wCount;i++){
  71. _tcscpy(GETLPCANDSTR(lpCandList,i+2),szCharArr[i]);
  72. }
  73. GnMsg.msg = WM_IME_COMPOSITION;
  74. GnMsg.wParam = 0;
  75. GnMsg.lParam = GCS_COMPSTR;
  76. GenerateMessage(hIMC, lpdwCurTransKey,(LPGENEMSG)&GnMsg);
  77. }
  78. my_exit:
  79. ImmUnlockIMCC(lpIMC->hCandInfo);
  80. ImmUnlockIMCC(lpIMC->hCompStr);
  81. ImmUnlockIMC(hIMC);
  82. }
  83. return TRUE;
  84. }