📄 subs.c
字号:
drc.top = pt.y - ptdif.y;
drc.right = drc.left + sz.cx;
drc.bottom = drc.top + sz.cy;
if (IsWindow(hWnd1)) {
drc1.left = pt.x - ptdif1.x;
drc1.top = pt.y - ptdif1.y;
drc1.right = drc1.left + sz1.cx;
drc1.bottom = drc1.top + sz1.cy;
}
DrawUIBorder(&drc);
if (IsWindow(hWnd1)) DrawUIBorder(&drc1);
}
else if (dwT & FIM_CAPUTURED)
{
DrawUIBorder(&drc);
if (IsWindow(hWnd1)) DrawUIBorder(&drc1);
SetWindowLong(hWnd,FIGWL_MOUSE,dwT | FIM_MOVED);
}
break;
case WM_LBUTTONUP:
case WM_RBUTTONUP:
dwT = GetWindowLong(hWnd,FIGWL_MOUSE);
if (dwT & FIM_CAPUTURED)
{
ReleaseCapture();
if (dwT & FIM_MOVED)
{
DrawUIBorder(&drc);
if (IsWindow(hWnd1)) DrawUIBorder(&drc1);
GetCursorPos( &pt );
MoveWindow(hWnd,pt.x - ptdif.x,
pt.y - ptdif.y,
sz.cx,
sz.cy,TRUE);
if(fIsCompWnd) {
HWND hUIWnd;
LPARAM mylParam;
*((LPWORD)(&mylParam)) = (WORD)(pt.x - ptdif.x);
*((LPWORD)(&mylParam)+1) = (WORD)(pt.y - ptdif.y);
hUIWnd = (HWND)GetWindowLong(hWnd,FIGWL_SVRWND);
if (IsWindow(hUIWnd))
SendMessage(hUIWnd,WM_UI_COMPMOVE,0,mylParam);
}
if (IsWindow(hWnd1)) {
MoveWindow(hWnd1,pt.x - ptdif1.x,
pt.y - ptdif1.y,
sz1.cx,
sz1.cy,TRUE);
}
}
}
break;
}
}
void SelectCandFromCandlist( HIMC hIMC, WORD wParam)
{
if( wParam >= _T('0') && wParam <= _T('9') ){
DWORD dwIdx;
LPTSTR lpConvStr;
LPINPUTCONTEXT lpIMC;
LPCANDIDATEINFO lpCandInfo;
LPCANDIDATELIST lpCandList;
LPCOMPOSITIONSTRING lpCompStr;
lpIMC = ImmLockIMC(hIMC);
lpCandInfo = (LPCANDIDATEINFO)ImmLockIMCC(lpIMC->hCandInfo);
lpCandList = (LPCANDIDATELIST)((LPSTR)lpCandInfo + lpCandInfo->dwOffset[0]);
lpCompStr = (LPCOMPOSITIONSTRING)ImmLockIMCC(lpIMC->hCompStr);
if( wParam == (WORD)_T('0') ) dwIdx=9;
else dwIdx = wParam - _T('1');
if(dwIdx < lpCandList->dwPageSize ) {
dwIdx += lpCandList->dwPageStart;
if( dwIdx < (lpCandList->dwCount + 2) && lpCandList->dwCount){
lpConvStr = ((LPMYCOMPSTR)lpCompStr)->FreePYComp.szConvCompStr;
_tcscpy(lpConvStr,GETLPCANDSTR(lpCandList,dwIdx));
MakeResultString(hIMC,TRUE);
}
}
ImmUnlockIMCC(lpIMC->hCompStr);
ImmUnlockIMCC(lpIMC->hCandInfo);
ImmUnlockIMC(hIMC);
}
return;
}
void DeleteCharBackward(HIMC hIMC,WORD wParam)
{
if(wConversionMode & CONVERSION_MODE_PHRASETOCHAR){
MakeResultString(hIMC,FALSE);
}
else if( wConversionMode & CONVERSION_MODE_I ||
wConversionMode & CONVERSION_MODE_U ||
wConversionMode & CONVERSION_MODE_V ) {
LPINPUTCONTEXT lpIMC;
LPCANDIDATEINFO lpCandInfo;
LPCANDIDATELIST lpCandList;
LPCOMPOSITIONSTRING lpCompStr;
GENEMSG GnMsg;
LPTSTR lpStr;
lpIMC = ImmLockIMC(hIMC);
lpCandInfo = (LPCANDIDATEINFO)ImmLockIMCC(lpIMC->hCandInfo);
lpCandList = (LPCANDIDATELIST)((LPSTR)lpCandInfo + lpCandInfo->dwOffset[0]);
lpCompStr = (LPCOMPOSITIONSTRING)ImmLockIMCC(lpIMC->hCompStr);
if( !lpCandList->dwCount ) MakeResultString(hIMC,FALSE);
else{
lpCandList->dwCount = 0;
lpStr = GETLPCOMPSTR(lpCompStr);
lpStr = CharPrev(lpStr,lpStr + _tcslen(lpStr));
*lpStr= _T('\0');
lpStr = ((LPMYCOMPSTR)lpCompStr)->FreePYComp.szPaintCompStr;
lpStr = CharPrev(lpStr,lpStr + _tcslen(lpStr));
*lpStr= _T('\0');
GnMsg.msg = WM_IME_COMPOSITION;
GnMsg.wParam = 0;
GnMsg.lParam = GCS_COMPSTR;
GenerateMessage(hIMC, lpdwCurTransKey,(LPGENEMSG)&GnMsg);
}
ImmUnlockIMCC(lpIMC->hCompStr);
ImmUnlockIMCC(lpIMC->hCandInfo);
ImmUnlockIMC(hIMC);
}
else AddChar(hIMC,wParam,EDIT_BACK);
return;
}
void DeleteCharForward(HIMC hIMC,WORD wParam)
{
AddChar(hIMC,wParam,EDIT_DELETE);
return;
}
void SpaceSelect(HIMC hIMC,WORD wParam)
{
WORD wCode;
wCode = (WORD)_T('1');
if(wConversionMode & CONVERSION_MODE_PHRASETOCHAR)
CharHandlePhToCh( hIMC,wCode,0);
else if( wConversionMode & CONVERSION_MODE_I ||
wConversionMode & CONVERSION_MODE_U ||
wConversionMode & CONVERSION_MODE_V ) {
SelectCandFromCandlist( hIMC, wCode);
}
else
SelectCand(hIMC,wCode);
return;
}
void SelectForwardFromCand(HIMC hIMC,LPCANDIDATELIST lpCandList)
{
HDC hDC;
TCHAR szTotal[200],szTemp[100];
SIZE sz;
WORD wPos;
GENEMSG GnMsg;
if(wConversionSet & CONVERSION_SET_SHAPE) {
wPos = (WORD) lpCandList->dwSelection;
if(wPos < lpCandList->dwCount) {
hDC = GetDC(NULL);
lpCandList->dwPageStart = wPos + 2;
_tcscpy(szTotal,"<>");
lpCandList->dwPageSize = 0;
while(wPos < lpCandList->dwCount && lpCandList->dwPageSize < CAND_PAGESIZE) {
_stprintf(szTemp,"%d%s ",1,GETLPCANDSTR(lpCandList,wPos+2));
_tcscat(szTotal,szTemp);
GetTextExtentPoint(hDC,szTotal,_tcslen(szTotal),&sz);
if(sz.cx > sizeCand[1].cx) {
break;
}
(lpCandList->dwPageSize)++;
wPos++;
}
ReleaseDC(NULL,hDC);
lpCandList->dwSelection = wPos;
if(lpCandList->dwPageStart > 2)
_tcscpy(GETLPCANDSTR(lpCandList,0),_T("<"));
else
_tcscpy(GETLPCANDSTR(lpCandList,0),_T(""));
if(wPos < lpCandList->dwCount)
_tcscpy(GETLPCANDSTR(lpCandList,1),_T(">"));
else
_tcscpy(GETLPCANDSTR(lpCandList,1),_T(""));
GnMsg.msg = WM_IME_COMPOSITION;
GnMsg.wParam = 0;
GnMsg.lParam = GCS_COMPSTR;
GenerateMessage(hIMC, lpdwCurTransKey,(LPGENEMSG)&GnMsg);
}
else MessageBeep(0xFFFFFFFF );
}
else{
if( lpCandList->dwPageStart + lpCandList->dwPageSize -2 <
lpCandList->dwCount) {
lpCandList->dwPageStart += lpCandList->dwPageSize;
lpCandList->dwPageSize = CAND_PAGESIZE;
GnMsg.msg = WM_IME_COMPOSITION;
GnMsg.wParam = 0;
GnMsg.lParam = GCS_COMPSTR;
GenerateMessage(hIMC, lpdwCurTransKey,(LPGENEMSG)&GnMsg);
}
else MessageBeep(0xFFFFFFFF );
}
}
void SelectBackwardFromCand(HIMC hIMC,LPCANDIDATELIST lpCandList)
{
HDC hDC;
TCHAR szTotal[200],szTemp[100];
SIZE sz;
WORD wCount;
GENEMSG GnMsg;
if(lpCandList->dwPageStart > 2) {
if(wConversionSet & CONVERSION_SET_SHAPE) {
hDC = GetDC(NULL);
lpCandList->dwSelection = (WORD)lpCandList->dwPageStart - 2;
wCount = (WORD)lpCandList->dwPageStart - 2;
_tcscpy(szTotal,"<>");
lpCandList->dwPageSize = 0;
while(wCount > 0 && lpCandList->dwPageSize < CAND_PAGESIZE) {
_stprintf(szTemp,"%d%s ",1,GETLPCANDSTR(lpCandList,wCount+2));
_tcscat(szTotal,szTemp);
GetTextExtentPoint(hDC,szTotal,_tcslen(szTotal),&sz);
if(sz.cx > sizeCand[1].cx) {
break;
}
(lpCandList->dwPageSize)++;
wCount--;
}
ReleaseDC(NULL,hDC);
lpCandList->dwPageStart -= (lpCandList->dwSelection - wCount);
if(lpCandList->dwPageStart > 2)
_tcscpy(GETLPCANDSTR(lpCandList,0),_T("<"));
else
_tcscpy(GETLPCANDSTR(lpCandList,0),_T(""));
if(lpCandList->dwSelection < lpCandList->dwCount)
_tcscpy(GETLPCANDSTR(lpCandList,1),_T(">"));
else
_tcscpy(GETLPCANDSTR(lpCandList,1),_T(""));
}
else {
if( (int)(lpCandList->dwPageStart) - (int)(lpCandList->dwPageSize) >= 1){
lpCandList->dwPageStart -= lpCandList->dwPageSize;
}
}
GnMsg.msg = WM_IME_COMPOSITION;
GnMsg.wParam = 0;
GnMsg.lParam = GCS_COMPSTR;
GenerateMessage(hIMC, lpdwCurTransKey,(LPGENEMSG)&GnMsg);
}
else MessageBeep(0xFFFFFFFF );
}
void SetPaintColor(HDC hDC, WORD wMode)
{
if(wMode & CONVERSION_MODE_PHRASETOCHAR) {
SetTextColor(hDC,RGB(0,0,128));
}
else if(wMode & CONVERSION_MODE_U) {
SetTextColor(hDC,RGB(128,0,0));
}
else if(wMode & CONVERSION_MODE_I) {
SetTextColor(hDC,RGB(0,128,128));
}
else if(wMode & CONVERSION_MODE_V) {
SetTextColor(hDC,RGB(128,0,128));
}
else{
SetTextColor(hDC,RGB(0,0,0));
}
}
BOOL WINAPI ConfigDialogProc(
HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam )
{
HKEY hKey,hChildKey;
DWORD dwConvSet;
DWORD dwData = sizeof(DWORD);
DWORD dwDisposition;
switch(message) {
case WM_INITDIALOG:
if ( RegOpenKeyEx(HKEY_LOCAL_MACHINE,
_T("Software\\freepy"),
0,
KEY_READ,
&hKey) == ERROR_SUCCESS ){
if( RegQueryValueEx( hKey,
_T("ConversionSet"),
NULL,
NULL,
(LPBYTE)&dwConvSet,
&dwData) == ERROR_SUCCESS ){
CheckDlgButton(hWnd,CONFIGSORT,
(dwConvSet & CONVERSION_SET_SORT)? BST_CHECKED :BST_UNCHECKED );
CheckDlgButton(hWnd,CONFIGPUNCT,
(dwConvSet & CONVERSION_SET_PUNCT)? BST_CHECKED :BST_UNCHECKED );
CheckDlgButton(hWnd,CONFIGFULLSHAPE,
(dwConvSet & CONVERSION_SET_FULLSHAPE)? BST_CHECKED :BST_UNCHECKED );
CheckDlgButton(hWnd,CONFIGFOLLOW,
(dwConvSet & CONVERSION_SET_FOLLOW)? BST_CHECKED :BST_UNCHECKED );
CheckDlgButton(hWnd,CONFIGGBK,
(dwConvSet & CONVERSION_SET_GBK)? BST_CHECKED :BST_UNCHECKED );
CheckDlgButton(hWnd,CONFIGFUZZYC,
(dwConvSet & CONVERSION_SET_FUZZYC)? BST_CHECKED :BST_UNCHECKED );
CheckDlgButton(hWnd,CONFIGFUZZYN,
(dwConvSet & CONVERSION_SET_FUZZYN)? BST_CHECKED :BST_UNCHECKED );
CheckDlgButton(hWnd,CONFIGFUZZYH,
(dwConvSet & CONVERSION_SET_FUZZYH)? BST_CHECKED :BST_UNCHECKED );
CheckDlgButton(hWnd,CONFIGFUZZYB,
(dwConvSet & CONVERSION_SET_FUZZYB)? BST_CHECKED :BST_UNCHECKED );
CheckDlgButton(hWnd,CONFIGSHAPE,
(dwConvSet & CONVERSION_SET_SHAPE)? BST_CHECKED :BST_UNCHECKED );
}
RegCloseKey(hKey);
}
break;
case WM_COMMAND:
switch(wParam) {
case CONFIGFUZZYC:
break;
case CONFIGFUZZYN:
break;
case CONFIGFUZZYH:
break;
case CONFIGSORT:
break;
case CONFIGPUNCT:
break;
case CONFIGFULLSHAPE:
break;
case IDOK:
if ( RegOpenKeyEx(HKEY_LOCAL_MACHINE,
_T("Software"),
0,
KEY_READ,
&hKey) == ERROR_SUCCESS ){
if( RegCreateKeyEx( hKey,
_T("freepy"),
0,
NULL,
REG_OPTION_NON_VOLATILE ,
KEY_ALL_ACCESS ,
NULL,
&hChildKey,
&dwDisposition ) == ERROR_SUCCESS) {
dwConvSet = 0;
if(IsDlgButtonChecked(hWnd,CONFIGSORT) == BST_CHECKED)
dwConvSet |= CONVERSION_SET_SORT;
else
dwConvSet &= ~CONVERSION_SET_SORT;
if(IsDlgButtonChecked(hWnd,CONFIGPUNCT) == BST_CHECKED)
dwConvSet |= CONVERSION_SET_PUNCT;
else
dwConvSet &= ~CONVERSION_SET_PUNCT;
if(IsDlgButtonChecked(hWnd,CONFIGFULLSHAPE) == BST_CHECKED)
dwConvSet |= CONVERSION_SET_FULLSHAPE;
else
dwConvSet &= ~CONVERSION_SET_FULLSHAPE;
if(IsDlgButtonChecked(hWnd,CONFIGFOLLOW) == BST_CHECKED)
dwConvSet |= CONVERSION_SET_FOLLOW;
else
dwConvSet &= ~CONVERSION_SET_FOLLOW;
if(IsDlgButtonChecked(hWnd,CONFIGGBK) == BST_CHECKED)
dwConvSet |= CONVERSION_SET_GBK;
else
dwConvSet &= ~CONVERSION_SET_GBK;
if(IsDlgButtonChecked(hWnd,CONFIGFUZZYC) == BST_CHECKED)
dwConvSet |= CONVERSION_SET_FUZZYC;
else
dwConvSet &= ~CONVERSION_SET_FUZZYC;
if(IsDlgButtonChecked(hWnd,CONFIGFUZZYN) == BST_CHECKED)
dwConvSet |= CONVERSION_SET_FUZZYN;
else
dwConvSet &= ~CONVERSION_SET_FUZZYN;
if(IsDlgButtonChecked(hWnd,CONFIGFUZZYH) == BST_CHECKED)
dwConvSet |= CONVERSION_SET_FUZZYH;
else
dwConvSet &= ~CONVERSION_SET_FUZZYH;
if(IsDlgButtonChecked(hWnd,CONFIGFUZZYB) == BST_CHECKED)
dwConvSet |= CONVERSION_SET_FUZZYB;
else
dwConvSet &= ~CONVERSION_SET_FUZZYB;
if(IsDlgButtonChecked(hWnd,CONFIGSHAPE) == BST_CHECKED)
dwConvSet |= CONVERSION_SET_SHAPE;
else
dwConvSet &= ~CONVERSION_SET_SHAPE;
wConversionSet = (WORD)dwConvSet;
RegSetValueEx(hChildKey,
_T("ConversionSet"),
0,
REG_DWORD,
(LPBYTE)&dwConvSet,
sizeof(DWORD));
RegCloseKey(hChildKey);
}
RegCloseKey(hKey);
}
EndDialog(hWnd,TRUE);
break;
case IDCANCEL:
EndDialog(hWnd,TRUE);
break;
default:
return FALSE;
break;
}
break;
default:
return FALSE;
break;
}
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -