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

📄 ectrans.c

📁 windows环境下的一套汉字处理引擎,可以对汉字进行相应的处理
💻 C
📖 第 1 页 / 共 3 页
字号:
	case WM_COMMAND:
	    switch (wParam)
		{
		case IDC_STRLIST:
		    {
		    NPSTR pStr;
		    wParam = SendDlgItemMessage (hDlg, IDC_STRLIST,
						 LB_GETCURSEL, NULL, NULL);
		    pStr = (NPSTR)LocalAlloc (LPTR,
			     max(256,(UINT)SendDlgItemMessage (hDlg, IDC_STRLIST,
							LB_GETTEXTLEN, wParam, NULL)+4));
		    SendDlgItemMessage (hDlg, IDC_STRLIST,
					LB_GETTEXT, wParam, (LPARAM)(LPSTR)pStr);
		    if (*pStr)
			{
			wParam = (WPARAM)pStr;
			for (pStr++;
			     *pStr && (*pStr != '=' || pStr[-1] == '\\');
			     pStr++);

			if (*pStr)
			    {
			    *pStr = 0;
			    SetDlgItemText (hDlg, IDC_CHNSTR, pStr+1);
			    pStr = (NPSTR)wParam;
			    SetDlgItemText (hDlg, IDC_ENGSTR, pStr);
			    EnableWindow (GetDlgItem (hDlg, IDC_MODIFY), TRUE);
			    }
			else
			    {
			    pStr = (NPSTR)wParam;
			    SetDlgItemText (hDlg, IDC_ENGSTR, pStr);
			    FindNearestString (pStr, pStr, 255);
			    SetDlgItemText (hDlg, IDC_CHNSTR, pStr);
			    EnableWindow (GetDlgItem (hDlg, IDC_MODIFY), FALSE);
			    }
			}
		    LocalFree ((HANDLE)pStr);
		    }
		    break;

		case IDC_CLEAR:
		    {
		    int i;
		    wParam = SendDlgItemMessage (hDlg, IDC_STRLIST,
						 LB_GETSELCOUNT, NULL, NULL);
		    SendDlgItemMessage (hDlg, IDC_STRLIST,
					LB_GETSELITEMS, wParam, lParam);
		    for (i = 0; i < (int)wParam; i++)
			{
			SendDlgItemMessage (hDlg, IDC_STRLIST,
					    LB_GETSELITEMS,
					    1, (LPARAM)(LPINT)&lParam);
			SendDlgItemMessage (hDlg, IDC_STRLIST,
					    LB_DELETESTRING,
					    LOWORD(lParam), NULL);
			}

		    if (!SendDlgItemMessage (hDlg, IDC_STRLIST,
					    LB_GETCOUNT, NULL, NULL))
			{
			RECT	rect;
			HWND	hWnd;
			if (hMemECErr)
			    {
			    lParam = (LPARAM)GlobalLock (hMemECErr);
			    *(LPINT)lParam = 0;
			    GlobalUnlock (hMemECErr);
			    }
			hWnd = GetDlgItem (hDlg, IDC_MIDLINE);
			GetWindowRect (hWnd, &rect);
			wParam = rect.bottom;
			GetWindowRect (hDlg, &rect);
			ShowWindow (GetDlgItem (hDlg, IDC_MIDLINE), SW_HIDE);
			MoveWindow (hDlg, rect.left, rect.top,
				    rect.right-rect.left, wParam-rect.top,
				    TRUE);
			InvalidateRect (hDlg, NULL, TRUE);
			WseCenterWindow (hDlg);
			}
		    }
		    break;

		case IDC_FIND:
		    {
		    NPSTR pStr = (NPSTR)LocalAlloc (LPTR, 256);
		    GetDlgItemText (hDlg, IDC_ENGSTR, pStr, 255);
		    FindNearestString (pStr, pStr, 255);
		    SetDlgItemText (hDlg, IDC_CHNSTR, pStr);
		    SendDlgItemMessage (hDlg, IDC_FIND, BM_SETSTYLE,
					(WPARAM)BS_PUSHBUTTON, 1L);
		    LocalFree ((HANDLE)pStr);
		    }
		    break;

		case IDC_MODIFY:
		    {
		    HGLOBAL hMem1 = GlobalAlloc (GPTR, 512);
		    HGLOBAL hMem2 = GlobalAlloc (GPTR, 512);
		    LPSTR  lpStr1 = GlobalLock (hMem1);
		    LPSTR  lpStr2 = GlobalLock (hMem2);
		    GetDlgItemText (hDlg, IDC_ENGSTR, lpStr1, 256);
		    GetDlgItemText (hDlg, IDC_CHNSTR, lpStr2, 256);
		    if (*lpStr1 && *lpStr2)
			{
			HCURSOR hPrevCur = SetCursor (LoadCursor(NULL,IDC_WAIT));
			if (*lpStr2)
			    ECDctModifyString (lpStr1, lpStr2);
			else
			    {
			    wsprintf (lpStr2, szConfirmDelete,
				      lpStr1);
			    if (MessageBox (hDlg, lpStr2, szConfirm, MB_YESNO | MB_ICONQUESTION) == IDYES)
				{
				ECDctDeleteString (lpStr1);
				PostMessage (hDlg, WM_COMMAND, IDC_FIND, NULL);
				}
			    }
			SendDlgItemMessage (hDlg, IDC_MODIFY, BM_SETSTYLE,
					    (WPARAM)BS_PUSHBUTTON, 1L);
			SetCursor (hPrevCur);
			}
		    GlobalUnlock (hMem1);
		    GlobalUnlock (hMem2);
		    GlobalFree (hMem1);
		    GlobalFree (hMem2);
		    }
		    break;

		case IDC_DELETE:
		    {
		    HGLOBAL hMem1 = GlobalAlloc (GPTR, 512);
		    HGLOBAL hMem2 = GlobalAlloc (GPTR, 512);
		    LPSTR  lpStr1 = GlobalLock (hMem1);
		    LPSTR  lpStr2 = GlobalLock (hMem2);
		    GetDlgItemText (hDlg, IDC_ENGSTR, lpStr1, 500);
		    if (*lpStr1)
			{
			wsprintf (lpStr2, szConfirmDelete, lpStr1);
			if (MessageBox (hDlg, lpStr2, szConfirm, MB_YESNO | MB_ICONQUESTION) == IDYES)
			    {
			    ECDctDeleteString (lpStr1);
			    PostMessage (hDlg, WM_COMMAND, IDC_FIND, NULL);
			    }
			}
		    GlobalUnlock (hMem1);
		    GlobalUnlock (hMem2);
		    GlobalFree (hMem1);
		    GlobalFree (hMem2);
		    }
		    break;

		case IDC_MERGE:
		    {
		    OPENFILENAME *ofn;
		    NPSTR	 szFile;

		    ofn = (OPENFILENAME *)LocalAlloc (LPTR, sizeof(OPENFILENAME));
		    szFile = (NPSTR)LocalAlloc (LPTR, 256);

		    ofn->lStructSize = sizeof(OPENFILENAME);
		    ofn->hwndOwner = hDlg;
		    ofn->lpstrFilter = szTextFilter;
		    ofn->nFilterIndex = 1;
		    ofn->lpstrFile = szFile;
		    ofn->nMaxFile = 255;
		    ofn->lpstrFileTitle = NULL;
		    ofn->nMaxFileTitle = 0;
		    ofn->lpstrInitialDir = NULL;
		    ofn->Flags = OFN_SHOWHELP | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;

		    if (GetOpenFileName (ofn))
			{
			HFILE hFile = _lopen (szFile, OF_READ);

			if (hFile != HFILE_ERROR)
			    {
			    long    dwSize = _llseek (hFile, 0L, SEEK_END);
			    HGLOBAL hmBuff = GlobalAlloc (GPTR, dwSize+32);
			    LPSTR   lpBuff = GlobalLock (hmBuff);
			    if (hmBuff && lpBuff && dwSize < 0x8000)
				{
				LPSTR lpSSS = lpBuff;

				SendDlgItemMessage (hDlg, IDC_STRLIST,
						    LB_RESETCONTENT, NULL, NULL);

				_llseek (hFile, 0L, SEEK_SET);
				_lread (hFile, lpBuff, (int)dwSize);
				while (*lpSSS)
				    {
				    LPSTR lpRRR;
				    while(*lpSSS && (*lpSSS == 10 || *lpSSS == 13 || *lpSSS == 27))
					lpSSS ++;
				    for (lpRRR = lpSSS; *lpRRR && (*lpRRR != 10 && *lpRRR != 13 && *lpRRR != 27); lpRRR++);
				    *lpRRR = 0;
				    if (*lpSSS)
					SendDlgItemMessage (hDlg, IDC_STRLIST,
							    LB_ADDSTRING, NULL,
							    (LPARAM)lpSSS);
				    lpSSS = lpRRR+1;
				    }

				if (SendDlgItemMessage (hDlg, IDC_STRLIST,
							LB_GETCOUNT, NULL, NULL))
				    {
				    RECT    rect;
				    HWND	hWnd = GetDlgItem (hDlg, IDC_STRLIST);
				    GetWindowRect (hWnd, &rect);
				    wParam = rect.bottom+8;
				    GetWindowRect (hDlg, &rect);
				    ShowWindow (GetDlgItem (hDlg, IDC_MIDLINE), SW_NORMAL);
				    MoveWindow (hDlg, rect.left, rect.top,
						rect.right-rect.left, wParam-rect.top,
						TRUE);
				    WseCenterWindow (hDlg);
				    }
				}
			    _lclose (hFile);
			    if (hmBuff) GlobalUnlock (hmBuff);
			    if (hmBuff) GlobalFree (hmBuff);
			    }
			}
		    LocalFree ((HANDLE)ofn);
		    LocalFree ((HANDLE)szFile);
		    }
		    break;

		case IDC_SAVE:
		    {
		    OPENFILENAME *ofn;
		    NPSTR	 szFile;

		    ofn = (OPENFILENAME *)LocalAlloc (LPTR, sizeof(OPENFILENAME));
		    szFile = (NPSTR)LocalAlloc (LPTR, 256);

		    ofn->lStructSize = sizeof(OPENFILENAME);
		    ofn->hwndOwner = hDlg;
		    ofn->lpstrFilter = szTextFilter;
		    ofn->nFilterIndex = 1;
		    ofn->lpstrFile = szFile;
		    ofn->nMaxFile = 255;
		    ofn->lpstrFileTitle = NULL;
		    ofn->nMaxFileTitle = 0;
		    ofn->lpstrInitialDir = NULL;
		    ofn->lpstrTitle = szSaveAs;
		    ofn->Flags = OFN_SHOWHELP | OFN_PATHMUSTEXIST | OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY;

		    if (GetOpenFileName (ofn))
			{
			HFILE hFile = _lcreat (szFile, 0);

			if (hFile != HFILE_ERROR)
			    {
			    HGLOBAL hmBuff = GlobalAlloc (GPTR, 1024);
			    LPSTR   lpBuff = GlobalLock (hmBuff);
			    int     i;
			    wParam = SendDlgItemMessage (hDlg, IDC_STRLIST,
							 LB_GETCOUNT, NULL, NULL);
			    for (i = 0; i < (int)wParam; i++)
				{
				SendDlgItemMessage (hDlg, IDC_STRLIST,
						    LB_GETTEXT, i, (LPARAM)lpBuff);
				lstrcat (lpBuff, "\r\n");
				_lwrite (hFile, lpBuff, lstrlen (lpBuff));
				}
			    _lclose (hFile);
			    if (hmBuff) GlobalUnlock (hmBuff);
			    if (hmBuff) GlobalFree (hmBuff);
			    }
			}
		    LocalFree ((HANDLE)ofn);
		    LocalFree ((HANDLE)szFile);
		    }
		    break;

		case IDC_ERRREC:
		case IDC_ALLREC:
		    ECRecordLevel = (wParam == IDC_ERRREC) ? 1 : 2;
		    SendMessage (hDlg, WM_SYSCOMMAND, SC_MINIMIZE, NULL);
		    break;

		case IDC_ENGSTR:
		    SendDlgItemMessage (hDlg, IDC_MODIFY, BM_SETSTYLE,
					(WPARAM)BS_PUSHBUTTON, 1L);
		    if (GetFocus () == (HWND)lParam)
			SendDlgItemMessage (hDlg, IDC_FIND,   BM_SETSTYLE,
					    (WPARAM)BS_DEFPUSHBUTTON, 1L);
		    wParam = !!SendDlgItemMessage (hDlg, IDC_ENGSTR,
						 WM_GETTEXTLENGTH, NULL, NULL);
		    EnableWindow (GetDlgItem (hDlg, IDC_FIND), wParam);
		    EnableWindow (GetDlgItem (hDlg, IDC_DELETE), wParam);
		    EnableWindow (GetDlgItem (hDlg, IDC_CHNSTR), wParam);
		    EnableWindow (GetDlgItem (hDlg, IDC_MODIFY), wParam);
		    break;

		case IDC_CHNSTR:
		    SendDlgItemMessage (hDlg, IDC_FIND,   BM_SETSTYLE,
					(WPARAM)BS_PUSHBUTTON, 1L);
		    if (GetFocus () == (HWND)lParam)
			SendDlgItemMessage (hDlg, IDC_MODIFY, BM_SETSTYLE,
					    (WPARAM)BS_DEFPUSHBUTTON, 1L);
		    break;

		case IDOK:
		    if (GetWindowLong (GetDlgItem (hDlg, IDC_FIND), GWL_STYLE) & 0x0f)
			SendMessage (hDlg, WM_COMMAND, IDC_FIND, NULL);
		    else if (GetWindowLong (GetDlgItem (hDlg, IDC_MODIFY), GWL_STYLE) & 0x0f)
			SendMessage (hDlg, WM_COMMAND, IDC_MODIFY, NULL);
		    break;

		case IDCANCEL:
		    EndDialog (hDlg, FALSE);
		    break;

		case IDC_GETLIST:
		    wParam = (WPARAM)LoadMenu (hInst, MAKEINTRESOURCE(IDD_MLREDIT));
		    if (wParam)
			{
			RECT rect;
			GetWindowRect (GetDlgItem(hDlg, IDC_GETLIST), &rect);
			TrackPopupMenu (GetSubMenu ((HMENU)wParam, 0), NULL,
					rect.left, rect.bottom,
					NULL, hDlg, NULL);
			DestroyMenu ((HMENU)wParam);
			}
		    break;

		case IDC_HELP:
		    {
		    NPSTR pStr = (NPSTR)LocalAlloc (LPTR, 128);
		    WseGetModuleFilePath (NULL, pStr, 127);
		    lstrcat (pStr, szRICHWINHLP);
		    WinHelp (hDlg, pStr, HELP_CONTEXT, NULL);
		    LocalFree ((HANDLE)pStr);
		    }
		    break;
		}
	    break;

	default:
	    return FALSE;
	}
    return TRUE;
}

int WINAPI WseConfigECDict (HWND hWnd)
{
    if (hWndECDialog)
	{
	BringWindowToTop (hWndECDialog);
	if (IsIconic (hWndECDialog))
	    SendMessage (hWndECDialog, WM_SYSCOMMAND, SC_RESTORE, NULL);
	return TRUE;
	}
    else
	return DialogBox (hInst, MAKEINTRESOURCE(IDD_MLREDIT),
			  hWnd, (FARPROC)ECDctSetModeProc);
}

BOOL far _InitECDct ()
{
	NPSTR	szFile;
	HFILE	hFile;
	int	i;

	szFile = (NPSTR)LocalAlloc (LPTR, 64);
	WseGetModuleFilePath (NULL, szFile, 63);
	lstrcat (szFile, szECWINMLR);

	ECTransEnable = FALSE;
	hFile = _lopen (szFile, OF_READ);

	if (hFile == HFILE_ERROR)
	    {
	    LocalFree ((HANDLE)szFile);
	    return FALSE;
	    }
	_lread (hFile, (LPSTR)IndexPosTab, 64);
	if (lstrcmp ((LPSTR)IndexPosTab, szMLR_LIB) != NULL)
		{
		_lclose (hFile);
		LocalFree ((HANDLE)szFile);
		return FALSE;
		}
	_lread (hFile, (LPSTR)IndexPosTab, sizeof(IndexPosTab));
	_lclose (hFile);

	if (hECCache)
	    WseReleaseFileCache (hECCache);

	hECCache = WseBuildFileCache (szFile, IndexPosTab[0],
				      IndexPosTab[255] - IndexPosTab[0]);
	for (i = 1; i < 256; i++)
	    IndexPosTab[i] -= IndexPosTab[0];

	IndexPosTab[0] = 0;

	ECTransEnable = !!hECCache;

	ECRecordLevel = 0;

	LocalFree ((HANDLE)szFile);
	return !!hECCache;
}

void far _ExitECDct ()
{
    if (hECCache)
	{
	WseReleaseFileCache (hECCache);
	hECCache = 0;
	}
    if (hMemECErr)
	{
	GlobalFree (hMemECErr);
	hMemECErr = NULL;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -