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

📄 t9.c

📁 完整的t9输入法
💻 C
📖 第 1 页 / 共 2 页
字号:
	}}static void ime_writemsg(int sindex){		WORD wDByte;	unsigned char cc [2];	switch(input_type){		case 0:	/*将选择的汉字写入文本框*/			if(sindex < perpagecount){				cc[0] = hz_Buf[(start_point + sindex)*2];				cc[1] = hz_Buf[(start_point + sindex)*2 + 1];				wDByte = MAKEWORD(cc[0], cc[1]);				if(sg_hTargetWnd && wDByte){					PostMessage(sg_hTargetWnd,MSG_CHAR,wDByte,0);					ClrInBuf();				}			}			break;						case 1:	/*将选择的英文字母写入文本框*/			if((sg_hTargetWnd)&& (en_Buf[sindex] != '\0')){				SendMessage(sg_hTargetWnd,MSG_CHAR,en_Buf[sindex],0);				ClrInBuf();			}			break;		case 2:	/*将选择的符号写入文本框*/			if(sindex < perpagecount){				if((start_point + sindex)<32){					if(sg_hTargetWnd)						SendMessage(sg_hTargetWnd,MSG_CHAR,fh_Buf[start_point + sindex],0);				}				else{					cc[0] = fh_Buf[32+(start_point+sindex-32)*2];					cc[1] = fh_Buf[32+(start_point+sindex-32)*2+1];					wDByte = MAKEWORD(cc[0],cc[1]);  					if (sg_hTargetWnd) PostMessage (sg_hTargetWnd, MSG_CHAR, wDByte, 0);				}			}				break;	}						}/*删除最近一个拼音字母*/static void delete_last_py(void){	char tmpkey[MAX_PY_LENGTH];	memset(tmpkey,0,MAX_PY_LENGTH);	memcpy(tmpkey,py_key,py_keycounts-1);	memset(py_key,0,MAX_PY_LENGTH);	memcpy(py_key,tmpkey,py_keycounts--);	cur_py = 0;	start_point = 0;}static void InputKeyProcess(unsigned char key, LPARAM lParam){	const char ckey[] = "0123456789";	char skey = 0;	int sel_index = 0;	skey = (char)ckey[key - myKEY_0];	sel_index = (int)(key - myKEY_0);	switch(cur_status){		case 0:		//键盘输入状态(只有中/英文输入才进入此状态)			if(key >= myKEY_2){				switch(input_type){					//中文输入					case 0:						if(py_key_filter(skey)){							sprintf(py_key,"%s%c",py_key,skey);		//保存输入键							cur_py=0;							start_point=0;							py_keycounts++;						}						break;					//英文输入					case 1:						get_en_from_table(skey);						break;				}			}//			else if(key == myKEY_0)//				if(sg_hTargetWnd) PostMessage(sg_hTargetWnd,MSG_KEYDOWN,SCANCODE_SPACE,0);			break;		case 1:					//选择状态			ime_writemsg(sel_index);			break;	}}//-------------------创建输入法窗口------------------int T9IMEWinProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam){	HDC hdc;	switch (message) 	{		case MSG_NCCREATE:			ime_method[0]=LoadStrByID(MID_IMEMETHOD1);			ime_method[1]=LoadStrByID(MID_IMEMETHOD2);			ime_method[2]=LoadStrByID(MID_IMEMETHOD3);			init_ime_parameter();			//初始化输入法			memset(en_Buf,0,MAX_KEY_CHAR);			memset(py_key,0,MAX_PY_LENGTH+1);			memset(py_Buf,0,MAX_PY_SAME * (MAX_PY_LENGTH+1));			memset(hz_Buf,0,MAX_HZ_COUNT*2);			SendMessage (HWND_DESKTOP, MSG_IME_REGISTER, (WPARAM)hWnd, 0); //打开窗口前先注册			break;		case MSG_IME_SETTARGET:			if (sg_hTargetWnd != hWnd)				sg_hTargetWnd = (HWND)wParam;			break;		case MSG_IME_GETTARGET:			return (int)sg_hTargetWnd;			break;		case MSG_KEYDOWN:			SetMenuTimeOut(time(NULL));			switch(wParam)			{				case SCANCODE_ESCAPE:			//.ESC键 关闭输入法					SendMessage(hWnd,MSG_CLOSE,0,0);					break;				case SCANCODE_BACKSPACE:		//.Backspace键(#)					switch(input_type)					{						case 0:							if(cur_status == 1)								cur_status = 0;							else							{								if(strlen(py_key)>0)									delete_last_py();	//删除前一个拼音字母								else								{									if(sg_hTargetWnd)										PostMessage(sg_hTargetWnd, MSG_KEYDOWN, wParam, lParam);								}							}							break;						case 1:							if(cur_status == 1)								ClrInBuf();			//清除英文输入?							else							{								if(sg_hTargetWnd) 									PostMessage(sg_hTargetWnd, MSG_KEYDOWN, wParam, lParam);							}							break;						case 2:							if(sg_hTargetWnd) PostMessage (sg_hTargetWnd, MSG_KEYDOWN, wParam, lParam);							break;					}						break;				case SCANCODE_PAGEUP://				case SCANCODE_TAB:			//.Tab键(*) : 切换输入法					if(++input_type > 2)						input_type = (IMEMode)?0:1;					ClrInBuf();					InvalidateRect(hWnd, NULL, TRUE);					break;				case SCANCODE_PAGEDOWN:					if(sg_hTargetWnd)						PostMessage(sg_hTargetWnd,MSG_KEYDOWN,SCANCODE_SPACE,0);				case SCANCODE_CURSORBLOCKUP:					case SCANCODE_CURSORBLOCKDOWN:					if(sg_hTargetWnd)						 PostMessage(sg_hTargetWnd,MSG_KEYDOWN,wParam,lParam);					break;				case SCANCODE_CURSORBLOCKLEFT:			//向前翻页					switch(input_type)					{					case 0:						if(cur_status == 0 && py_count > 0 && cur_py >0)							cur_py--;						else if(cur_status == 1 && (strlen(hz_Buf)/2) > perpagecount)						{							if(start_point >= perpagecount) 								start_point -= perpagecount;						}						else if(py_count == 0)						{							if(sg_hTargetWnd) 								PostMessage(sg_hTargetWnd, MSG_KEYDOWN, SCANCODE_CURSORBLOCKLEFT,lParam);						}						break;					case 1:						if(sg_hTargetWnd) 							PostMessage(sg_hTargetWnd, MSG_KEYDOWN, SCANCODE_CURSORBLOCKLEFT,lParam);						break;					case 2:						if(start_point >=perpagecount) start_point -= perpagecount;						break;						}										InvalidateRect(hWnd, NULL, TRUE);					break;				case SCANCODE_CURSORBLOCKRIGHT:			//向后翻页					switch(input_type)					{						case 0:							if(cur_status == 0 && py_count >0 && cur_py < py_count-1)								cur_py++;							else if(cur_status == 1 && (strlen(hz_Buf)/2) > perpagecount)							{								if((start_point + perpagecount) < strlen(hz_Buf)/2) 									start_point += perpagecount;							}							else if(py_count == 0)							{								if(sg_hTargetWnd) 									PostMessage(sg_hTargetWnd, MSG_KEYDOWN, SCANCODE_CURSORBLOCKRIGHT,lParam);							}							break;												case 1:							if(sg_hTargetWnd) 								PostMessage(sg_hTargetWnd, MSG_KEYDOWN, SCANCODE_CURSORBLOCKRIGHT,lParam);							break;						case 2:							if((start_point + perpagecount) < 38) 								start_point += perpagecount;							break;					}					InvalidateRect(hWnd, NULL, TRUE);					break;				//输入选择						case SCANCODE_ENTER:		//Enter键					switch(input_type)					{						case 0:							if(hz_Buf[0] != '\0')							{								if(cur_status==0) 									cur_status = 1;								else									ime_writemsg(0);							}							break;						case 1:							if(en_Buf[0] != '\0')								ime_writemsg(0);							break;						case 2:							ime_writemsg(0);							break;					}					return 0;			}			return 0;		case MSG_CHAR:			if((BYTE)wParam >= myKEY_0 && (BYTE)wParam <= myKEY_9)				InputKeyProcess((BYTE)wParam, lParam);			InvalidateRect(hWnd, NULL, TRUE);			return 0;   	    		case MSG_PAINT:			hdc = BeginPaint (hWnd);			RefreshIMEBox(hWnd, hdc);			EndPaint (hWnd, hdc);			return 0;		case MSG_CLOSE:			SendMessage(HWND_DESKTOP,MSG_IME_UNREGISTER,(WPARAM)hWnd, 0);			DestroyMainWindow (hWnd);			hIMEWnd = NULL;			return 0;	}	return DefaultMainWinProc(hWnd, message, wParam, lParam);}HWND T9IMEWindow(HWND hosting, int lx, int ty, int rx, int by, int imemode){	MSG msg;	MAINWINCREATE CreateInfo;		IMEMode = imemode;	hosting = GetMainWindowHandle(hosting);	CreateInfo.dwStyle = WS_VISIBLE;	CreateInfo.dwExStyle = WS_EX_NONE;	CreateInfo.spCaption = "ime";	CreateInfo.hMenu = 0;	CreateInfo.hCursor = GetSystemCursor(0);	CreateInfo.hIcon = 0;	CreateInfo.MainWindowProc = T9IMEWinProc;	CreateInfo.lx = lx;	CreateInfo.ty = ty;	CreateInfo.rx = rx;	CreateInfo.by = by;	CreateInfo.iBkColor = GetWindowElementColor(BKC_CONTROL_DEF);	CreateInfo.dwAddData = 0;	CreateInfo.hHosting = hosting;	hIMEWnd = CreateMainWindow (&CreateInfo);	if (hIMEWnd == HWND_INVALID)		return HWND_INVALID;	ShowWindow (hIMEWnd, SW_SHOWNORMAL); 	while (GetMessage(&msg,hIMEWnd))	{		TranslateMessage(&msg);		DispatchMessage(&msg);	}	MainWindowThreadCleanup(hIMEWnd);	return hIMEWnd;}

⌨️ 快捷键说明

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