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

输入法编程

开发平台:

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 CharHandleU( HIMC hIMC,WORD wParam,LONG lParam)
  8. {
  9.     LPINPUTCONTEXT lpIMC;
  10. LPCANDIDATEINFO lpCandInfo;
  11. LPCANDIDATELIST lpCandList;
  12. LPCOMPOSITIONSTRING lpCompStr;
  13. WORD wHead;
  14.     lpIMC = ImmLockIMC(hIMC);
  15. lpCandInfo = (LPCANDIDATEINFO)ImmLockIMCC(lpIMC->hCandInfo);
  16. lpCandList = (LPCANDIDATELIST)((LPSTR)lpCandInfo  + lpCandInfo->dwOffset[0]);
  17. lpCompStr = (LPCOMPOSITIONSTRING)ImmLockIMCC(lpIMC->hCompStr);
  18. //俞建明添加
  19. lpCompStr->dwCompStrLen=1;
  20.     //本程序只使用wParam,比较简单。自定义符号 
  21. if( !lpCandList->dwCount ){
  22. int i;
  23. wHead = wParam - _T('!');
  24. /*for( i=0;_tcslen(aPunct[wHead][i]);i++){
  25. _tcscpy(GETLPCANDSTR(lpCandList,i+2),aPunct[wHead][i]);
  26. }*/
  27. for( i=0;_tcslen(aPunct+32*(40*wHead+i));i++){
  28. _tcscpy(GETLPCANDSTR(lpCandList,i+2),aPunct+32*(40*wHead+i));
  29. }
  30. if( i == 0)  MessageBeep(0xFFFFFFFF );
  31. else if( i == 1 ){
  32. LPTSTR lpConvStr;
  33. lpConvStr = ((LPMYCOMPSTR)lpCompStr)->FreePYComp.szConvCompStr;
  34. //_tcscpy(lpConvStr,aPunct[wHead][0]);
  35. _tcscpy(lpConvStr,aPunct+32*40*wHead);
  36. MakeResultString(hIMC,TRUE);
  37. }
  38. else {
  39. LPTSTR lpStr;
  40. WORD wStrLen;
  41. lpStr = GETLPCOMPSTR(lpCompStr);
  42. wStrLen = _tcslen(lpStr);
  43. *(lpStr + wStrLen) = (TCHAR)wParam;
  44. *(lpStr + wStrLen +1) = _T('');
  45. lpStr = ((LPMYCOMPSTR)lpCompStr)->FreePYComp.szPaintCompStr;
  46. wStrLen = _tcslen(lpStr);
  47. if(wStrLen ==0){
  48. _tcscpy(lpStr,UMODEL);
  49. wStrLen = _tcslen(lpStr);
  50. }
  51. *(lpStr + wStrLen) = (TCHAR)wParam;
  52. *(lpStr + wStrLen +1) = _T('');
  53. lpCandList->dwSelection = 0;
  54. lpCandList->dwCount = i;
  55. lpCandList->dwPageStart = 2;
  56. lpCandList->dwPageSize = 0;
  57. SelectForwardFromCand(hIMC,lpCandList);
  58. }
  59. }
  60. else{
  61. if( wParam == _T('=') || wParam == _T('.') || wParam == _T('>')) {
  62. SelectForwardFromCand(hIMC,lpCandList);
  63. }
  64. else if( wParam == _T('-') || wParam == _T(',') || wParam == _T('<')) {
  65. SelectBackwardFromCand(hIMC,lpCandList);
  66. }
  67. else if( wParam >= _T('0') && wParam <= _T('9') ){
  68. SelectCandFromCandlist(hIMC, wParam);
  69. }
  70. }
  71. ImmUnlockIMCC(lpIMC->hCompStr);
  72. ImmUnlockIMCC(lpIMC->hCandInfo);
  73. ImmUnlockIMC(hIMC);
  74. return TRUE;
  75. }
  76. BOOL CharHandleHistoryReuse( HIMC hIMC,WORD wParam,LONG lParam)
  77. {
  78.     LPINPUTCONTEXT lpIMC;
  79. LPCANDIDATEINFO lpCandInfo;
  80. LPCANDIDATELIST lpCandList;
  81. LPCOMPOSITIONSTRING lpCompStr;
  82. LPTSTR lpConvStr;
  83. WORD wHead=0;
  84.     lpIMC = ImmLockIMC(hIMC);
  85. lpCandInfo = (LPCANDIDATEINFO)ImmLockIMCC(lpIMC->hCandInfo);
  86. lpCandList = (LPCANDIDATELIST)((LPSTR)lpCandInfo  + lpCandInfo->dwOffset[0]);
  87. lpCompStr = (LPCOMPOSITIONSTRING)ImmLockIMCC(lpIMC->hCompStr);
  88.     //本程序只使用wParam,比较简单。 
  89. if((wParam>=_T('1'))&&(wParam<=_T('9'))){
  90. wHead= wParam - _T('0');
  91. }
  92. else if(wParam ==_T('0')) wHead=10;
  93. else {
  94. ImmUnlockIMCC(lpIMC->hCompStr);
  95. ImmUnlockIMCC(lpIMC->hCandInfo);
  96. ImmUnlockIMC(hIMC);
  97. return FALSE;
  98. }
  99. lpCompStr->dwCompStrLen=1;
  100. lpConvStr = ((LPMYCOMPSTR)lpCompStr)->FreePYComp.szConvCompStr;
  101. *(YJMMessage+wHead*2)='';
  102. _tcscpy(lpConvStr,YJMMessage);
  103. //_tcscpy(YJMMessage,"");
  104. *YJMMessage='';
  105. *(YJMMessage+1)='';
  106. *(YJMMessage+2)='';
  107. MakeResultString(hIMC,TRUE);
  108. //my_exit:
  109. ImmUnlockIMCC(lpIMC->hCompStr);
  110. ImmUnlockIMCC(lpIMC->hCandInfo);
  111. ImmUnlockIMC(hIMC);
  112. return TRUE;
  113. }