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

输入法编程

开发平台:

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