HZmodeu.c
资源名称:大熊猫输入法原码.zip [点击查看]
上传用户:szljw888
上传日期:2010-04-11
资源大小:124k
文件大小:3k
源码类别:
输入法编程
开发平台:
C/C++
- /* 大熊猫输入法(Free Chinese Input) 由YJMSIR(yjmsir@163.com)编写
- * 协议: GPL
- * freeinput( A Chinese Input Method) by YJMSIR(yjmsir@163.com)
- * Licence: GPL
- */
- #include "freepy.h"
- BOOL CharHandleU( HIMC hIMC,WORD wParam,LONG lParam)
- {
- LPINPUTCONTEXT lpIMC;
- LPCANDIDATEINFO lpCandInfo;
- LPCANDIDATELIST lpCandList;
- LPCOMPOSITIONSTRING lpCompStr;
- WORD wHead;
- lpIMC = ImmLockIMC(hIMC);
- lpCandInfo = (LPCANDIDATEINFO)ImmLockIMCC(lpIMC->hCandInfo);
- lpCandList = (LPCANDIDATELIST)((LPSTR)lpCandInfo + lpCandInfo->dwOffset[0]);
- lpCompStr = (LPCOMPOSITIONSTRING)ImmLockIMCC(lpIMC->hCompStr);
- //俞建明添加
- lpCompStr->dwCompStrLen=1;
- //本程序只使用wParam,比较简单。自定义符号
- if( !lpCandList->dwCount ){
- int i;
- wHead = wParam - _T('!');
- /*for( i=0;_tcslen(aPunct[wHead][i]);i++){
- _tcscpy(GETLPCANDSTR(lpCandList,i+2),aPunct[wHead][i]);
- }*/
- for( i=0;_tcslen(aPunct+32*(40*wHead+i));i++){
- _tcscpy(GETLPCANDSTR(lpCandList,i+2),aPunct+32*(40*wHead+i));
- }
- if( i == 0) MessageBeep(0xFFFFFFFF );
- else if( i == 1 ){
- LPTSTR lpConvStr;
- lpConvStr = ((LPMYCOMPSTR)lpCompStr)->FreePYComp.szConvCompStr;
- //_tcscpy(lpConvStr,aPunct[wHead][0]);
- _tcscpy(lpConvStr,aPunct+32*40*wHead);
- MakeResultString(hIMC,TRUE);
- }
- else {
- LPTSTR lpStr;
- WORD wStrLen;
- lpStr = GETLPCOMPSTR(lpCompStr);
- wStrLen = _tcslen(lpStr);
- *(lpStr + wStrLen) = (TCHAR)wParam;
- *(lpStr + wStrLen +1) = _T(' ');
- lpStr = ((LPMYCOMPSTR)lpCompStr)->FreePYComp.szPaintCompStr;
- wStrLen = _tcslen(lpStr);
- if(wStrLen ==0){
- _tcscpy(lpStr,UMODEL);
- wStrLen = _tcslen(lpStr);
- }
- *(lpStr + wStrLen) = (TCHAR)wParam;
- *(lpStr + wStrLen +1) = _T(' ');
- lpCandList->dwSelection = 0;
- lpCandList->dwCount = i;
- lpCandList->dwPageStart = 2;
- lpCandList->dwPageSize = 0;
- SelectForwardFromCand(hIMC,lpCandList);
- }
- }
- else{
- if( wParam == _T('=') || wParam == _T('.') || wParam == _T('>')) {
- SelectForwardFromCand(hIMC,lpCandList);
- }
- else if( wParam == _T('-') || wParam == _T(',') || wParam == _T('<')) {
- SelectBackwardFromCand(hIMC,lpCandList);
- }
- else if( wParam >= _T('0') && wParam <= _T('9') ){
- SelectCandFromCandlist(hIMC, wParam);
- }
- }
- ImmUnlockIMCC(lpIMC->hCompStr);
- ImmUnlockIMCC(lpIMC->hCandInfo);
- ImmUnlockIMC(hIMC);
- return TRUE;
- }
- BOOL CharHandleHistoryReuse( HIMC hIMC,WORD wParam,LONG lParam)
- {
- LPINPUTCONTEXT lpIMC;
- LPCANDIDATEINFO lpCandInfo;
- LPCANDIDATELIST lpCandList;
- LPCOMPOSITIONSTRING lpCompStr;
- LPTSTR lpConvStr;
- WORD wHead=0;
- lpIMC = ImmLockIMC(hIMC);
- lpCandInfo = (LPCANDIDATEINFO)ImmLockIMCC(lpIMC->hCandInfo);
- lpCandList = (LPCANDIDATELIST)((LPSTR)lpCandInfo + lpCandInfo->dwOffset[0]);
- lpCompStr = (LPCOMPOSITIONSTRING)ImmLockIMCC(lpIMC->hCompStr);
- //本程序只使用wParam,比较简单。
- if((wParam>=_T('1'))&&(wParam<=_T('9'))){
- wHead= wParam - _T('0');
- }
- else if(wParam ==_T('0')) wHead=10;
- else {
- ImmUnlockIMCC(lpIMC->hCompStr);
- ImmUnlockIMCC(lpIMC->hCandInfo);
- ImmUnlockIMC(hIMC);
- return FALSE;
- }
- lpCompStr->dwCompStrLen=1;
- lpConvStr = ((LPMYCOMPSTR)lpCompStr)->FreePYComp.szConvCompStr;
- *(YJMMessage+wHead*2)=' ';
- _tcscpy(lpConvStr,YJMMessage);
- //_tcscpy(YJMMessage,"");
- *YJMMessage=' ';
- *(YJMMessage+1)=' ';
- *(YJMMessage+2)=' ';
- MakeResultString(hIMC,TRUE);
- //my_exit:
- ImmUnlockIMCC(lpIMC->hCompStr);
- ImmUnlockIMCC(lpIMC->hCandInfo);
- ImmUnlockIMC(hIMC);
- return TRUE;
- }