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

输入法编程

开发平台:

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. #include <time.h>
  8. #include <sys/types.h>
  9. #include <sys/timeb.h>
  10. static TCHAR CDigit[][4] = { _T("零"),_T("十"),_T("百"),_T("千"),_T("万"),_T("亿"),_T("兆") };
  11. static TCHAR CNum[][4] = {_T("零"),_T("一"),_T("二"),_T("三"),_T("四"),_T("五"),_T("六"),_T("七"),_T("八"),_T("九"),_T("十")};
  12. static TCHAR CData[][4] = { _T("年"),_T("月"),_T("日"),_T("时"),_T("分"),_T("秒")};
  13. static TCHAR CWeek[][8] = { _T("星期日"),_T("星期一"),_T("星期二"),_T("星期三"),_T("星期四"),_T("星期五"),_T("星期六"),_T("上午"),_T("下午")};
  14. void ChineseNumber(int i , LPTSTR lpStr)
  15. {
  16. if( i<11 && i>= 0 ) {
  17. _tcscpy(lpStr,CNum[i]);
  18. }
  19. else if( i<20 ) {
  20. _tcscpy(lpStr,CNum[10]);
  21. _tcscat(lpStr,CNum[i-10]);
  22. }
  23. else if( i<100 ) {
  24. if( i%10 ) {
  25. _tcscpy(lpStr,CNum[i/10]);
  26. _tcscat(lpStr,CDigit[1]);
  27. _tcscat(lpStr,CNum[i%10]);
  28. }
  29. else {
  30. _tcscpy(lpStr,CNum[i/10]);
  31. _tcscat(lpStr,CDigit[1]);
  32. }
  33. }
  34. else if( i<100000 ) {
  35. int nRest,nDevide;
  36. BOOL fStart = FALSE;
  37. nDevide = 10000;
  38. nRest = i;
  39. *lpStr = _T('');
  40. while( nDevide ){
  41. i = nRest/nDevide;
  42. nRest %= nDevide;
  43. if( !i && fStart) _tcscat(lpStr,CNum[i]);
  44. else if ( i ) {
  45. fStart = TRUE;
  46. _tcscat(lpStr,CNum[i]);
  47. }
  48. nDevide /= 10;
  49. }
  50. }
  51. return;
  52. }
  53. BOOL CharHandleI( HIMC hIMC,WORD wParam,LONG lParam)
  54. {
  55.     LPINPUTCONTEXT lpIMC;
  56. LPCANDIDATEINFO lpCandInfo;
  57. LPCANDIDATELIST lpCandList;
  58. LPCOMPOSITIONSTRING lpCompStr;
  59. LPTSTR lpStr;
  60. WORD wStrLen;
  61. _tcscpy(YJMMessage,_T("(d或t):"));
  62.     lpIMC = ImmLockIMC(hIMC);
  63. lpCandInfo = (LPCANDIDATEINFO)ImmLockIMCC(lpIMC->hCandInfo);
  64. lpCandList = (LPCANDIDATELIST)((LPSTR)lpCandInfo  + lpCandInfo->dwOffset[0]);
  65. lpCompStr = (LPCOMPOSITIONSTRING)ImmLockIMCC(lpIMC->hCompStr);
  66. lpCompStr->dwCompStrLen=1;//
  67. //本程序仅用到了wParam这个参数
  68. if( !lpCandList->dwCount ){//
  69. if( wParam == _T('d') || wParam == _T('t')){
  70. time_t ltime;
  71. struct tm *today;
  72. int nYear,nMon,nDay,nHour,nMin,nSec,nWeek;
  73. time( &ltime );
  74. today = localtime( &ltime );
  75. nSec = today->tm_sec;
  76. nMin = today->tm_min;
  77. nHour = today->tm_hour;
  78. nDay = today->tm_mday;
  79. nMon = today->tm_mon + 1;
  80. nYear = today->tm_year + 1900;
  81. nWeek = today->tm_wday;
  82. //取得系统时间及日期
  83. if( wParam == _T('d')){
  84. lpStr = GETLPCANDSTR(lpCandList,2);
  85. _stprintf(lpStr,_T("%d"),nYear);
  86. _tcscat(lpStr,CData[0]);
  87. _stprintf(lpStr+_tcslen(lpStr),_T("%d"),nMon);
  88. _tcscat(lpStr,CData[1]);
  89. _stprintf(lpStr+_tcslen(lpStr),_T("%d"),nDay);
  90. _tcscat(lpStr,CData[2]);
  91. lpStr = GETLPCANDSTR(lpCandList,3);
  92. ChineseNumber(nYear,lpStr);
  93. _tcscat(lpStr,CData[0]);
  94. lpStr = GETLPCANDSTR(lpCandList,4);
  95. ChineseNumber(nMon,lpStr);
  96. _tcscat(lpStr,CData[1]);
  97. ChineseNumber(nDay,lpStr + _tcslen(lpStr));
  98. _tcscat(lpStr,CData[2]);
  99. lpStr = GETLPCANDSTR(lpCandList,5);
  100. _stprintf(lpStr,_T("%d.%d.%d"),nYear,nMon,nDay);
  101. lpStr = GETLPCANDSTR(lpCandList,6);
  102. _stprintf(lpStr,_T("%d/%d/%d"),nMon,nDay,nYear);
  103. lpStr = GETLPCANDSTR(lpCandList,7);
  104. _tcscpy(lpStr,CWeek[nWeek]);
  105. lpCandList->dwSelection = 0;
  106. lpCandList->dwCount = 6;
  107. lpCandList->dwPageStart = 2;
  108. lpCandList->dwPageSize = 0;
  109. }
  110. if(wParam == _T('t') ) {
  111. lpStr = GETLPCANDSTR(lpCandList,2);
  112. ChineseNumber(nHour,lpStr);
  113. _tcscat(lpStr,CData[3]);
  114. ChineseNumber(nMin,lpStr + _tcslen(lpStr));
  115. _tcscat(lpStr,CData[4]);
  116. ChineseNumber(nSec,lpStr + _tcslen(lpStr));
  117. _tcscat(lpStr,CData[5]);
  118. lpStr = GETLPCANDSTR(lpCandList,3);
  119. ChineseNumber(nHour,lpStr);
  120. _tcscat(lpStr,CData[3]);
  121. ChineseNumber(nMin,lpStr + _tcslen(lpStr));
  122. _tcscat(lpStr,CData[4]);
  123. lpStr = GETLPCANDSTR(lpCandList,4);
  124. _stprintf(lpStr,_T("%d"),nHour);
  125. _tcscat(lpStr,CData[3]);
  126. _stprintf(lpStr+_tcslen(lpStr),_T("%d"),nMin);
  127. _tcscat(lpStr,CData[4]);
  128. _stprintf(lpStr+_tcslen(lpStr),_T("%d"),nSec);
  129. _tcscat(lpStr,CData[5]);
  130. lpStr = GETLPCANDSTR(lpCandList,5);
  131. _stprintf(lpStr,_T("%d"),nHour);
  132. _tcscat(lpStr,CData[3]);
  133. _stprintf(lpStr+_tcslen(lpStr),_T("%d"),nMin);
  134. _tcscat(lpStr,CData[4]);
  135. lpStr = GETLPCANDSTR(lpCandList,6);
  136. _stprintf(lpStr,_T("%d:%d:%d"),nHour,nMin,nSec);
  137. lpStr = GETLPCANDSTR(lpCandList,7);
  138. _stprintf(lpStr,_T("%d:%d"),nHour,nMin);
  139. lpCandList->dwSelection = 0;
  140. lpCandList->dwCount = 6;
  141. lpCandList->dwPageStart = 2;
  142. lpCandList->dwPageSize = 0;
  143. }
  144. lpStr = GETLPCOMPSTR(lpCompStr);
  145. wStrLen = _tcslen(lpStr);
  146. *(lpStr + wStrLen) = (TCHAR)wParam;
  147. *(lpStr + wStrLen +1) = _T('');
  148. }
  149. else {
  150. MessageBeep(0xFFFFFFFF );
  151.     _tcscpy(YJMMessage,_T("(有效按键:d,t):"));
  152. }
  153. //共有的显示部分
  154. lpStr = ((LPMYCOMPSTR)lpCompStr)->FreePYComp.szPaintCompStr;
  155. // wStrLen = _tcslen(lpStr);
  156. // if(wStrLen ==0){
  157. _tcscpy(lpStr,IMODEL);
  158. // wStrLen = _tcslen(lpStr);
  159. // }
  160. _tcscat(lpStr,YJMMessage);
  161. wStrLen = _tcslen(lpStr);
  162. *(lpStr + wStrLen) = (TCHAR)wParam;
  163. *(lpStr + wStrLen +1) = _T('');
  164. SelectForwardFromCand(hIMC,lpCandList);
  165. }
  166. else {
  167. /* if( wParam == _T('=') || wParam == _T('.') || wParam == _T('>')) {
  168. SelectForwardFromCand(hIMC,lpCandList);
  169. }
  170. else if( wParam == _T('-') || wParam == _T(',') || wParam == _T('<')) {
  171. SelectBackwardFromCand(hIMC,lpCandList);
  172. }*/
  173. if( wParam >= _T('0') && wParam <= _T('9') ){
  174. SelectCandFromCandlist(hIMC, wParam);
  175. }
  176. }
  177. ImmUnlockIMCC(lpIMC->hCompStr);
  178. ImmUnlockIMCC(lpIMC->hCandInfo);
  179. ImmUnlockIMC(hIMC);
  180. return TRUE;
  181. }