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

📄 subs.c

📁 拼音输入法源码vc开发的
💻 C
📖 第 1 页 / 共 2 页
字号:
			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 + -