📄 t9.c
字号:
}}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 + -