HZmodeu.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 CharHandleU( HIMC hIMC,WORD wParam,LONG lParam)
  23. {
  24.     LPINPUTCONTEXT lpIMC;
  25. LPCANDIDATEINFO lpCandInfo;
  26. LPCANDIDATELIST lpCandList;
  27. LPCOMPOSITIONSTRING lpCompStr;
  28. WORD wHead;
  29.     lpIMC = ImmLockIMC(hIMC);
  30. lpCandInfo = (LPCANDIDATEINFO)ImmLockIMCC(lpIMC->hCandInfo);
  31. lpCandList = (LPCANDIDATELIST)((LPSTR)lpCandInfo  + lpCandInfo->dwOffset[0]);
  32. lpCompStr = (LPCOMPOSITIONSTRING)ImmLockIMCC(lpIMC->hCompStr);
  33. if( !lpCandList->dwCount ){
  34. int i;
  35. wHead = wParam - _T('!');
  36. for( i=0;_tcslen(aPunct[wHead][i]);i++){
  37. _tcscpy(GETLPCANDSTR(lpCandList,i+2),aPunct[wHead][i]);
  38. }
  39. if( i == 0)  MessageBeep(0xFFFFFFFF );
  40. else if( i == 1 ){
  41. LPTSTR lpConvStr;
  42. lpConvStr = ((LPMYCOMPSTR)lpCompStr)->FreePYComp.szConvCompStr;
  43. _tcscpy(lpConvStr,aPunct[wHead][0]);
  44. MakeResultString(hIMC,TRUE);
  45. }
  46. else {
  47. LPTSTR lpStr;
  48. WORD wStrLen;
  49. lpStr = GETLPCOMPSTR(lpCompStr);
  50. wStrLen = _tcslen(lpStr);
  51. *(lpStr + wStrLen) = (TCHAR)wParam;
  52. *(lpStr + wStrLen +1) = _T('');
  53. lpStr = ((LPMYCOMPSTR)lpCompStr)->FreePYComp.szPaintCompStr;
  54. wStrLen = _tcslen(lpStr);
  55. *(lpStr + wStrLen) = (TCHAR)wParam;
  56. *(lpStr + wStrLen +1) = _T('');
  57. lpCandList->dwSelection = 0;
  58. lpCandList->dwCount = i;
  59. lpCandList->dwPageStart = 2;
  60. lpCandList->dwPageSize = 0;
  61. SelectForwardFromCand(hIMC,lpCandList);
  62. }
  63. }
  64. else{
  65. if( wParam == _T('=') || wParam == _T('.') || wParam == _T('>')) {
  66. SelectForwardFromCand(hIMC,lpCandList);
  67. }
  68. else if( wParam == _T('-') || wParam == _T(',') || wParam == _T('<')) {
  69. SelectBackwardFromCand(hIMC,lpCandList);
  70. }
  71. else if( wParam >= _T('0') && wParam <= _T('9') ){
  72. SelectCandFromCandlist(hIMC, wParam);
  73. }
  74. }
  75. ImmUnlockIMCC(lpIMC->hCompStr);
  76. ImmUnlockIMCC(lpIMC->hCandInfo);
  77. ImmUnlockIMC(hIMC);
  78. return TRUE;
  79. }