www.pudn.com > 82325543.rar > HZmodei.c


/* 
 * Copyright (C) 1999.4  Li ZhenChun 
 * 
 * This program is free software; you can redistribute it and/or modify 
 * it under the terms of the GNU General Public License as published by 
 * the Free Software Foundation; either version 2 of the License; or 
 * (at your option) any later version. 
 * 
 * This program is distributed in the hope that is will be useful, but 
 * WITHOUT ANY WARRANTY; without even the implied warranty of  
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 
 * General Public License for more details. 
 * 
 * You should have received a copy of the GNU General Public License 
 * along with this program; if not, write to the Free Software 
 * Foundation, Inc., 675 Mass Ave, Cambridge, M A 02139, USA. 
 * 
 * Author: Li ZhenChun  email: zhchli@163.net or zhchli@126.com 
 *  
 */ 
 
#include "freepy.h" 
#include  
#include  
#include  
 
static TCHAR CDigit[][4] = { _T("零"),_T("十"),_T("百"),_T("千"),_T("万"),_T("亿"),_T("兆") }; 
static TCHAR CNum[][4] = {_T("零"),_T("一"),_T("二"),_T("三"),_T("四"),_T("五"),_T("六"),_T("七"),_T("八"),_T("九"),_T("十")}; 
static TCHAR CData[][4] = { _T("年"),_T("月"),_T("日"),_T("时"),_T("分"),_T("秒")}; 
static TCHAR CWeek[][8] = { _T("星期日"),_T("星期一"),_T("星期二"),_T("星期三"),_T("星期四"),_T("星期五"),_T("星期六"),_T("上午"),_T("下午")}; 
 
void ChineseNumber(int i , LPTSTR lpStr) 
{ 
	if( i<11 && i>= 0 ) { 
		_tcscpy(lpStr,CNum[i]); 
	} 
	else if( i<20 ) { 
		_tcscpy(lpStr,CNum[10]); 
		_tcscat(lpStr,CNum[i-10]); 
	} 
	else if( i<100 ) { 
		if( i%10 ) { 
			_tcscpy(lpStr,CNum[i/10]); 
			_tcscat(lpStr,CDigit[1]); 
			_tcscat(lpStr,CNum[i%10]); 
		} 
		else { 
			_tcscpy(lpStr,CNum[i/10]); 
			_tcscat(lpStr,CDigit[1]); 
		} 
	} 
	else if( i<100000 ) { 
		int nRest,nDevide; 
		BOOL fStart = FALSE; 
 
		nDevide = 10000; 
		nRest = i; 
 
		*lpStr = _T('\0'); 
		while( nDevide ){ 
			i = nRest/nDevide; 
			nRest %= nDevide; 
			if( !i && fStart) _tcscat(lpStr,CNum[i]); 
			else if ( i ) { 
				fStart = TRUE; 
				_tcscat(lpStr,CNum[i]); 
			} 
			nDevide /= 10; 
		} 
	} 
	return; 
} 
 
BOOL CharHandleI( HIMC hIMC,WORD wParam,LONG lParam) 
{ 
    LPINPUTCONTEXT lpIMC; 
	LPCANDIDATEINFO lpCandInfo; 
	LPCANDIDATELIST lpCandList; 
	LPCOMPOSITIONSTRING lpCompStr; 
 
 
    lpIMC = ImmLockIMC(hIMC); 
	lpCandInfo = (LPCANDIDATEINFO)ImmLockIMCC(lpIMC->hCandInfo); 
	lpCandList = (LPCANDIDATELIST)((LPSTR)lpCandInfo  + lpCandInfo->dwOffset[0]); 
	lpCompStr = (LPCOMPOSITIONSTRING)ImmLockIMCC(lpIMC->hCompStr); 
 
	if( !lpCandList->dwCount ){ 
		if( wParam == _T('d') || wParam == _T('t')){ 
			time_t ltime; 
			struct tm *today; 
			int nYear,nMon,nDay,nHour,nMin,nSec,nWeek; 
			BOOL fPM = FALSE; 
			LPTSTR lpStr; 
			WORD wStrLen; 
 
			time( <ime ); 
			today = localtime( <ime ); 
			nSec = today->tm_sec; 
			nMin = today->tm_min; 
			nHour =	today->tm_hour; 
			nDay = today->tm_mday; 
			nMon = today->tm_mon + 1; 
			nYear =	today->tm_year + 1900; 
			nWeek =	today->tm_wday; 
 
			if( wParam == _T('d') ){ 
				lpStr = GETLPCANDSTR(lpCandList,2); 
				_stprintf(lpStr,_T("%d"),nYear); 
				_tcscat(lpStr,CData[0]); 
				_stprintf(lpStr+_tcslen(lpStr),_T("%d"),nMon); 
				_tcscat(lpStr,CData[1]); 
				_stprintf(lpStr+_tcslen(lpStr),_T("%d"),nDay); 
				_tcscat(lpStr,CData[2]); 
 
				lpStr = GETLPCANDSTR(lpCandList,3); 
				ChineseNumber(nYear,lpStr); 
				_tcscat(lpStr,CData[0]); 
 
				lpStr = GETLPCANDSTR(lpCandList,4); 
				ChineseNumber(nMon,lpStr); 
				_tcscat(lpStr,CData[1]); 
				ChineseNumber(nDay,lpStr + _tcslen(lpStr)); 
				_tcscat(lpStr,CData[2]); 
 
				lpStr = GETLPCANDSTR(lpCandList,5); 
				_stprintf(lpStr,_T("%d.%d.%d"),nYear,nMon,nDay); 
 
				lpStr = GETLPCANDSTR(lpCandList,6); 
				_stprintf(lpStr,_T("%d/%d/%d"),nMon,nDay,nYear); 
 
				lpStr = GETLPCANDSTR(lpCandList,7); 
				_tcscpy(lpStr,CWeek[nWeek]); 
 
				lpCandList->dwSelection = 0; 
				lpCandList->dwCount = 6; 
				lpCandList->dwPageStart = 2; 
				lpCandList->dwPageSize = 0; 
			} 
			if(wParam == _T('t') ) { 
				lpStr = GETLPCANDSTR(lpCandList,2); 
				ChineseNumber(nHour,lpStr); 
				_tcscat(lpStr,CData[3]); 
				ChineseNumber(nMin,lpStr + _tcslen(lpStr)); 
				_tcscat(lpStr,CData[4]); 
				ChineseNumber(nSec,lpStr + _tcslen(lpStr)); 
				_tcscat(lpStr,CData[5]); 
 
				lpStr = GETLPCANDSTR(lpCandList,3); 
				ChineseNumber(nHour,lpStr); 
				_tcscat(lpStr,CData[3]); 
				ChineseNumber(nMin,lpStr + _tcslen(lpStr)); 
				_tcscat(lpStr,CData[4]); 
 
 
				lpStr = GETLPCANDSTR(lpCandList,4); 
				_stprintf(lpStr,_T("%d"),nHour); 
				_tcscat(lpStr,CData[3]); 
				_stprintf(lpStr+_tcslen(lpStr),_T("%d"),nMin); 
				_tcscat(lpStr,CData[4]); 
				_stprintf(lpStr+_tcslen(lpStr),_T("%d"),nSec); 
				_tcscat(lpStr,CData[5]); 
 
 
				lpStr = GETLPCANDSTR(lpCandList,5); 
				_stprintf(lpStr,_T("%d"),nHour); 
				_tcscat(lpStr,CData[3]); 
				_stprintf(lpStr+_tcslen(lpStr),_T("%d"),nMin); 
				_tcscat(lpStr,CData[4]); 
 
				lpStr = GETLPCANDSTR(lpCandList,6); 
				_stprintf(lpStr,_T("%d:%d:%d"),nHour,nMin,nSec); 
 
				lpStr = GETLPCANDSTR(lpCandList,7); 
				_stprintf(lpStr,_T("%d:%d"),nHour,nMin); 
 
				lpCandList->dwSelection = 0; 
				lpCandList->dwCount = 6; 
				lpCandList->dwPageStart = 2; 
				lpCandList->dwPageSize = 0; 
 
			} 
			lpStr = GETLPCOMPSTR(lpCompStr); 
			wStrLen = _tcslen(lpStr); 
			*(lpStr + wStrLen) = (TCHAR)wParam; 
			*(lpStr + wStrLen +1) = _T('\0'); 
 
			lpStr = ((LPMYCOMPSTR)lpCompStr)->FreePYComp.szPaintCompStr; 
			wStrLen = _tcslen(lpStr); 
			*(lpStr + wStrLen) = (TCHAR)wParam; 
			*(lpStr + wStrLen +1) = _T('\0'); 
 
			SelectForwardFromCand(hIMC,lpCandList); 
		} 
		else MessageBeep(0xFFFFFFFF ); 
	} 
	else { 
		if( wParam == _T('=') || wParam == _T('.') || wParam == _T('>')) { 
			SelectForwardFromCand(hIMC,lpCandList); 
		} 
		else if( wParam == _T('-') || wParam == _T(',') || wParam == _T('<')) { 
			SelectBackwardFromCand(hIMC,lpCandList); 
		} 
 
		if( wParam >= _T('0') && wParam <= _T('9') ){ 
			SelectCandFromCandlist(hIMC, wParam); 
		} 
	} 
 
	ImmUnlockIMCC(lpIMC->hCompStr); 
	ImmUnlockIMCC(lpIMC->hCandInfo); 
	ImmUnlockIMC(hIMC); 
	return TRUE; 
}