📄 pinyin.c
字号:
static BOOL IsBackSpace( char ch);static BOOL IsNumeric( char ch);static void ReCalMatchHZChars();static void ReCalListChars();LGUIIme pinyinIme = { IME_STATUS_PINYIN, TASKBAR_IMEBMP_PINYIN, InitIme_pinyin, DestroyIme_pinyin, ResetIme_pinyin, CharArrived_pinyin, FillBackwardSelection_pinyin, FillForwardSelection_pinyin, 0};static BOOLInitIme_pinyin(){ memset(&imeDataTable, 0, sizeof(ImeDataTable)); return true;}static voidDestroyIme_pinyin(){ return;}static voidResetIme_pinyin(){ memset(&imeDataTable, 0, sizeof(ImeDataTable));}static BOOL CharArrived_pinyin( char ch) { char charBuffer[4]; char* pRes; int iIndex; if(IsBackSpace(ch)){ if(imeDataTable.iTotalInputChars == 0){ //SendMessage(hWndFocus,MSG_KEYDOWN,SCANCODE_BACKSPACE,(LPARAM)NULL); SendKeyDown2Client(SCANCODE_BACKSPACE); } else{ imeDataTable.iTotalInputChars -- ; imeDataTable.pTotalInputChars[imeDataTable.iTotalInputChars] = 0; ReCalMatchHZChars(); ReCalListChars(); } } else if(IsNumeric(ch)){ //select a chinese charater iIndex = ch - 0x30; if(iIndex + imeDataTable.iBeginPos > imeDataTable.iTotalHZChars){ memset(imeDataTable.pCurSelected,0,3); return true; } else{ iIndex = (imeDataTable.iBeginPos + iIndex) * 2; imeDataTable.pCurSelected[0] = imeDataTable.pTotalHZChars[iIndex]; imeDataTable.pCurSelected[1] = imeDataTable.pTotalHZChars[iIndex+1]; imeDataTable.pCurSelected[2] = 0; strcpy(charBuffer, imeDataTable.pCurSelected); SendString2Client(charBuffer); //SendMessage(hWndFocus,MSG_CHAR,(WPARAM)charBuffer,(LPARAM)NULL); imeDataTable.pListChars[0] = 0; imeDataTable.iTotalInputChars = 0; imeDataTable.pTotalInputChars[0] = 0; imeDataTable.iTotalHZChars = 0; imeDataTable.pTotalHZChars[0] =0; imeDataTable.iBeginPos = 0; } } else{// imeDataTable.pTotalInputChars[imeDataTable.iTotalInputChars] = ch; imeDataTable.iTotalInputChars ++; imeDataTable.pTotalInputChars[imeDataTable.iTotalInputChars] = 0; ReCalMatchHZChars(); ReCalListChars(); } return true;}static voidFillBackwardSelection_pinyin(){ if(imeDataTable.iBeginPos == 0) return; else imeDataTable.iBeginPos -= FRAME_CHARS; ReCalListChars();}static voidFillForwardSelection_pinyin(){ if(imeDataTable.iBeginPos + FRAME_CHARS > imeDataTable.iTotalHZChars) return; else imeDataTable.iBeginPos += FRAME_CHARS; ReCalListChars();}static char*GetMatchHZString( char* pString){ int i; for(i=0;i<MAX_ITEMS;i++){ if(strcmp(pString, codeTable[i].pPinyin)==0) return codeTable[i].pHanzi; } return NULL;}static BOOL IsBackSpace( char ch){ if(ch == 8) return true; else return false;}static BOOL IsNumeric( char ch){ if((ch >= '0') && (ch <='9')) return true; else return false;}static void ReCalMatchHZChars(){ char* pRes; char buffer[10]; strcpy(buffer,imeDataTable.pTotalInputChars); //printf("%s\n",buffer); pRes = GetMatchHZString(buffer); if(!pRes){ imeDataTable.iTotalHZChars = 0; imeDataTable.pTotalHZChars[0] = 0; } else{ strcpy(imeDataTable.pTotalHZChars,pRes); imeDataTable.iTotalHZChars = strlen(imeDataTable.pTotalHZChars); } imeDataTable.iBeginPos = 0; imeDataTable.pReturnHZChars[0] = 0; imeDataTable.pCurSelected[0] =0; imeDataTable.pListChars[0] = 0; }static void ReCalListChars(){ int i; char* pListString; //according iBeginPos pListString = imeDataTable.pListChars; //printf("%s\n",imeDataTable.pTotalHZChars); for(i = 0; i<FRAME_CHARS; i++){ if(imeDataTable.iBeginPos + i >= imeDataTable.iTotalHZChars/2 - 1) break; pListString[0] = i+0x30; pListString[1] = imeDataTable.pTotalHZChars[(imeDataTable.iBeginPos+i) * 2]; pListString[2] = imeDataTable.pTotalHZChars[(imeDataTable.iBeginPos+i) * 2 + 1]; pListString[3] = ' '; pListString += 4; } *pListString = 0; //printf("%s\n",imeDataTable.pListChars); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -