⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 t9.c

📁 完整的t9输入法
💻 C
📖 第 1 页 / 共 2 页
字号:
/*T9*//*author:liming*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#include "minigui/common.h" #include "minigui/minigui.h" #include "minigui/gdi.h" #include "minigui/window.h" #include "minigui/control.h" #include "minigui/endianrw.h" #include "ssrpub.h"#include "msg.h"#include "options.h"#include "flashdb.h"#include "commu.h"#include "ssrcommon.h"#include "exfun.h"#include "t9mb.h"#include "t9.h"//全局变量HWND sg_hTargetWnd = 0; 				// 输入的目标窗口.HWND hIMEWnd = 0;int IMEMode;			//const T9PY_IDX* pt9idx;char en_Buf[MAX_KEY_CHAR];	//当前的字母(用于英文输入方式)char py_key[MAX_PY_LENGTH+1];	//中文输入中拼音输入键序列char py_Buf[MAX_PY_SAME][MAX_PY_LENGTH+1];				//拼音unsigned char hz_Buf[MAX_HZ_COUNT*2];					//汉字unsigned char fh_Buf[50];int	perpagecount;		//每页显示的文字个数int	input_type;		//输入方式	0:拼音,1:英文,2:符号int 	cur_status;		//输入状态	0.输入状态; 1.选择状态int 	start_point;		//显示数据的起始位置int	py_keycounts;		//中文输入键个数(拼音长度)int 	cur_py;			//当前拼音序号int	py_count;		//拼音个数//function definestatic void InputKeyProcess(unsigned char key, LPARAM lParam);static void init_ime_parameter(void);static void RefreshIMEBox(HWND hWnd, HDC hDC);static void ClrInBuf(void);static BOOL py_key_filter(char key);				//拼音输入键是否有效static void get_py_from_table(void);static void get_hz_from_table(char* py);static void get_en_from_table(char key);static void ime_writemsg(int sindex);static void delete_last_py(void);char* ime_method[3];static const unsigned char fh_table[] = "~!@#$%^&*()_+{}|:\"<>?`-=[]\\;',./,。‘’“”";//funcion processstatic void init_ime_parameter(void){	memset(fh_Buf,0,50);	nmemcpy(fh_Buf,fh_table,strlen(fh_table));	perpagecount = MAX_ROW_COUNTS;	cur_py = 0;	py_keycounts = 0;	py_count = 0;	start_point = 0;	input_type = (IMEMode)?0:1;	//默认输入方式	cur_status = 0;			//初始输入状态}static void ClrInBuf(void){	switch(input_type)	{		case 0:			memset(hz_Buf,0,MAX_HZ_COUNT*2);			memset(py_key,0,MAX_PY_LENGTH+1);		//清除拼音输入			memset(py_Buf,0,MAX_PY_LENGTH+1);			py_keycounts = 0;			cur_status = 0;			cur_py = 0;			start_point = 0;			py_count = 0;			break;		case 1:			memset(en_Buf,0,MAX_KEY_CHAR);			cur_status = 0;			break;		case 2:			cur_status = 1;		//符号输入直接进入选择状态			break;	}}static void RefreshIMEBox(HWND hWnd, HDC hDC){	char str[100];	char sstr[100];	char tmppy[MAX_PY_LENGTH+1];		//当前拼音	char tmpstr[4];				//读取汉字	PLOGFONT logfont;	SIZE size;	int i;	int pos_x, cWidth, sWidth;			//绘制选择框	SetBkColor(hDC,GetWindowElementColor(BKC_CONTROL_DEF));	memset(str,0,100);	strcpy(str,ime_method[input_type]);			//写输入方式标识	switch(input_type)	{		case 0:			//input chinese			TextOut(hDC,2,2,str);			GetTextExtent(HDC_SCREEN, str, strlen(str), &size);			cWidth = GetMaxFontWidth(hDC)/2;		//一个字节宽度			pos_x = (strlen(str))*cWidth;			if(py_keycounts>0)			{				get_py_from_table();		//get py from table				if(cur_status == 0)				{					for(i=0;i<py_count;i++)						sprintf(str,"%s%s ",str,py_Buf[i]);										for(i=0;i<cur_py;i++)						pos_x += (strlen(py_Buf[i])+1)*cWidth;					sWidth = (strlen(py_Buf[cur_py]))*cWidth+6;					SetBkMode(hDC,BM_TRANSPARENT);					SetBrushColor(hDC,COLOR_blue);					FillBox (hDC, pos_x ,2 ,sWidth, size.cy);				}				else if(cur_status == 1)					sprintf(str,"%s%s",str,py_Buf[cur_py]);				TextOut(hDC, 2, 2, str);	//output first line							memset(tmppy,0,MAX_PY_LENGTH+1);				strncpy(tmppy,py_Buf[cur_py],MAX_PY_LENGTH);				get_hz_from_table(tmppy);	//get hz from table				memset(str,0,4*perpagecount+2);				if((start_point >= perpagecount) && (cur_status == 1))					sprintf(str,"%s","<");				else					sprintf(str,"%s"," ");				memset(sstr,0,4*perpagecount);				for(i=0;i<perpagecount;i++)				{					memset(tmpstr,0,4);					tmpstr[0] = hz_Buf[(start_point+i)*2];					tmpstr[1] = hz_Buf[(start_point+i)*2+1];					tmpstr[2] = '\0';					if(tmpstr[0]!='\0' || tmpstr[1] != '\0')					{						if(cur_status == 0) sprintf(sstr,"%s  %s",sstr,tmpstr);						else if(cur_status == 1) sprintf(sstr,"%s%d.%s",sstr,i,tmpstr);					}				}				if((((start_point+perpagecount)*2) < strlen(hz_Buf)) && (cur_status == 1))					sprintf(str,"%s%s%s",str,sstr,">");				else					sprintf(str,"%s%s%s",str,sstr," ");				logfont = GetSystemFont(SYSLOGFONT_CONTROL);			//设置中文显示字体				SelectFont (HDC_SCREEN, logfont);				TextOut(hDC, 2, size.cy+2, str);				}					break;		case 1:			//英文输入显示			TextOut(hDC, 2, 2, str);			memset(str,0,60);					GetTextExtent (HDC_SCREEN, en_Buf, strlen(en_Buf), &size);			for(i = 0; i < strlen(en_Buf); i++){				if(cur_status == 0)					sprintf(str,"%s  %c  ",str,en_Buf[i]);				else if(cur_status == 1)					sprintf(str,"%s%d %c  ",str,i,en_Buf[i]);			}			TextOut(hDC,2+2,size.cy+2,str);			break;		case 2:			//符号输入			TextOut(hDC, 2, 2, str);			GetTextExtent(HDC_SCREEN, str, strlen(str), &size);			memset(str,0,4*perpagecount+2);			if((start_point >= perpagecount) && (cur_status == 1)) sprintf(str,"%s","<");			else	sprintf(str,"%s"," ");						memset(sstr,0,4*perpagecount);			for(i=0;i<perpagecount;i++){				if((start_point+i)<32)					sprintf(sstr,"%s %d %c",sstr,i,fh_Buf[start_point+i]);				else{					if((fh_Buf[32+(start_point+i-32)*2] != '\0')||(fh_Buf[32+(start_point+i-32)*2+1] != '\0')){						memset(tmpstr,0,4);						tmpstr[0] = fh_Buf[32+(start_point+i-32)*2];						tmpstr[1] = fh_Buf[32+(start_point+i-32)*2+1];						sprintf(sstr,"%s %d %s",sstr,i,tmpstr);					}				}			}			if((start_point+perpagecount) < 38 && (cur_status == 1))				sprintf(str,"%s%s %s",str,sstr,">");			else				sprintf(str,"%s%s %s",str,sstr," ");			logfont = GetSystemFont(SYSLOGFONT_CONTROL);			SelectFont (HDC_SCREEN, logfont);							TextOut(hDC, 2, size.cy+2, str);			break;	}}static void get_hz_from_table(char* py){	int i;	BOOL matchflag = FALSE;		pt9idx = t9PY_index;	memset(hz_Buf,0,MAX_HZ_COUNT*2);	while(pt9idx->PY[0] != '\0'){		matchflag = TRUE;		if(strlen(pt9idx->PY) == py_keycounts){			for(i=0;i<py_keycounts;i++){				if(py[i] != pt9idx->PY[i]) 					matchflag = FALSE;			}		}		else			matchflag = FALSE;		if(matchflag){			i = 0;			while(pt9idx->MB[i] != '\0'){				hz_Buf[i] = pt9idx->MB[i];				i++;			}			break;		}		pt9idx++;	}}static void get_py_from_table(void){	int i;	BOOL matchflag;	pt9idx = t9PY_index;	py_count = 0;	for(i=0;i<MAX_PY_SAME;i++)		memset(py_Buf[i],0,MAX_PY_LENGTH+1);	while(pt9idx->T9[0] != '\0'){		matchflag = TRUE;		if(strlen(pt9idx->T9) == py_keycounts){			for(i=0;i<py_keycounts;i++){				if(py_key[i] != pt9idx->T9[i]) matchflag = FALSE;			}		}		else			matchflag = FALSE;			if(matchflag){			strcpy(py_Buf[py_count++],pt9idx->PY);		}		pt9idx++;	}}static BOOL py_key_filter(char key){	char tmpkey[MAX_PY_LENGTH];	int i;	BOOL matchflag;	BOOL newpyflag;											//输入键是否有效	pt9idx = t9PY_index;	strcpy(tmpkey,py_key);									//记录已输入键序列		if(py_keycounts < MAX_PY_LENGTH){		sprintf(tmpkey,"%s%c",tmpkey,key);				//暂存新输入键		newpyflag = FALSE;		while(pt9idx->T9[0] != '\0'){			matchflag = TRUE;			if(strlen(pt9idx->T9) == py_keycounts +1){				for(i=0;i<py_keycounts+1;i++){					if(tmpkey[i] != pt9idx->T9[i]) matchflag = FALSE;				}			}			else				matchflag = FALSE;			if(matchflag) return TRUE;				pt9idx++;		}	}	return FALSE;}static void get_en_from_table(char key){	T9EN_IDX* penidx;	penidx = (T9EN_IDX*)t9EN_index;	int i = 0;	for(i=0;i<8;i++){		if(key == penidx->key[0]){			strcpy(en_Buf,penidx->Letter);			cur_status = 1;			break;		}		penidx++;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -