亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? diction.cpp

?? 強大易用的郵件收發客戶端
?? CPP
字號:
// cfgedit.cpp : implementation file
//

#include "stdafx.h"
#include "diction.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#ifdef _USE_DICTION_

#define DICT_MARK _T("WinDict ")
#define MAX_TRANS	800
#define START_MARK	_T("$") _T("{")
#define END_MARK	'}'
//////////////////////////////////////////////////////////////////////
//  Iterate for all child windows (incude child of child)

class  CWndChildIterator
{
public:
	CWndChildIterator();
	void InitIterator(CWnd* pParentWnd);
	void operator ++(int);
	void operator ++();
	operator int();
	CWnd* operator()(); //return current child window
protected:
	virtual BOOL TestChild(CWnd* pParent, CWnd* pChild);
	CWnd* pParent;
private:
	CWnd* pChild;
};
// --------- INLINES ------------
inline CWndChildIterator::CWndChildIterator() {
	pChild=NULL;
	pParent=NULL;
}
inline void CWndChildIterator::operator ++() {
	ASSERT(operator int());
	operator++(1);
}

inline CWndChildIterator::operator int() {
	return pChild!=NULL;
}

inline CWnd* CWndChildIterator::operator()() {
	ASSERT(operator int());
	return pChild;
}

//////////////////////////////////////////////////////////////////////
// Iterate for all controls from Dlg

class  CDlgItemIterator : public CWndChildIterator
{
protected:
	virtual BOOL TestChild(CWnd* pParent, CWnd* pChild);
};

//////////////////////////////////////////////////////////////////////
void CWndChildIterator::InitIterator(CWnd * pParentWnd)
{
	pChild = NULL;
	pParent = NULL;
	ASSERT(pParentWnd);
	if (!pParentWnd)
		return;
	pParent = pParentWnd;
	pChild = pParentWnd->GetTopWindow();
	if (pChild && !TestChild(pParent, pChild))
		operator++ ();
}			    

//  CWndChildIterator
BOOL CWndChildIterator::TestChild(CWnd * /* pParent */ , CWnd * /* hChild */ )
{
	return TRUE;				// All children
}

void CWndChildIterator::operator++ (int)
{
	ASSERT(pChild);
	while (pChild)
	{
		pChild = pChild->GetNextWindow(GW_HWNDNEXT);
		if (pChild && TestChild(pParent, pChild))
			break;
	}
}
void GetMark(LPCTSTR pSrc, CString& sRet)
{
	sRet.Empty();
	if (!pSrc || *pSrc!='[')
		return;
	pSrc++;
	LPTSTR pEnd = _tcsrchr(pSrc, ']');
	if (!pEnd)
		return;
	*pEnd = 0;
	sRet = pSrc;
	*pEnd = ']';
}

//////////////////////////////////////////////////////////////////////
// CDlgItemIterator
BOOL CDlgItemIterator::TestChild(CWnd * pParent, CWnd * pChild)
{
	ASSERT(pParent);
	ASSERT(pChild);
	if (!pParent)
		return FALSE;
	if (!pChild)
		return FALSE;
	if (!pParent->IsChild(pChild))
		return FALSE;
	return TRUE;
}

CDictionary Diction;
CDictionary* GetDictionary()
{
	return &Diction;
}
CDictionary::CDictionary():m_Words(300)
{
}

BOOL CDictionary::SetDictionary(LPCTSTR sFile, BOOL bAll)
{
	m_Words.RemoveAll();
	return LoadDiction(sFile, bAll);
}
BOOL CDictionary::LoadDiction(LPCTSTR sFile, BOOL bAll, int nOnlyNew, BOOL bGetData )
{
	if (!sFile)
		return TRUE;	// default language 
	CString sFullPath(sFile);
	DicData	temp;
	DicData* pData = &temp;
	if (bGetData)
		pData = &m_Data;
	if (!CheckFile(sFile, pData, &sFullPath))
		return FALSE;
	sFile = sFullPath;
	CStdioFile file;
	if (!file.Open(sFile, CFile::modeRead|CFile::typeText, NULL))
		return FALSE;
	CString s;
	CString s2;
	while ( file.ReadString(s) )
	{
		s.TrimLeft();
		if (s.IsEmpty())
			continue;
		if (s[0]==_T(';') || s[0]==_T('['))
			continue;
		BOOL bIgnore = FALSE;
		if (nOnlyNew)
		{
			if (m_Words.Lookup(s, s2))
				bIgnore = TRUE;
		}
		// key
		if (!bIgnore && (bAll || nOnlyNew) )
		{
			s2.Empty();
			AddEntry(s, s2);
		}
		if (!file.ReadString(s2))
			break;
		if (bIgnore || nOnlyNew==2)
			continue;
		if (s2.IsEmpty() || s2[0]==';')
			continue;
		AddEntry(s, s2);
	}
	return TRUE;
}
BOOL CDictionary::CBTranslate(CWnd* pIt)
{
	if (!pIt)
		return FALSE;
	int nC = pIt->SendMessage(CB_GETCOUNT);
	int nCur = pIt->SendMessage(CB_GETCURSEL);
	CString str;
	for (int i=0; i<nC; i++)
	{
		int len=pIt->SendMessage(CB_GETLBTEXTLEN, i);
		if (len<0 || len>200)
			return FALSE;	// that's probably not CB
		if (!len)
			continue;
		pIt->SendMessage(CB_GETLBTEXT, i,  (LPARAM)str.GetBufferSetLength(len));
		if (str.Find(START_MARK)<0)
			continue;
		StrTranslate(str);
		DWORD dwData = pIt->SendMessage(CB_GETITEMDATA, i);

		pIt->SendMessage(CB_INSERTSTRING, i, (LPARAM)(LPCTSTR)str);
		pIt->SendMessage(CB_SETITEMDATA, i, dwData);
		
		pIt->SendMessage(CB_DELETESTRING, i+1);
	}
	if (nCur>=0)
		pIt->SendMessage(CB_SETCURSEL, nCur);
	return TRUE;
}

BOOL CDictionary::DlgTranslate(CWnd* pDlg)
{
    if (!pDlg)
        return FALSE;

    CString str;
    pDlg->GetWindowText(str);
    StrTranslate(str);
    pDlg->SetWindowText(str);
    CDlgItemIterator I;
	static TCHAR szClass[10];
    for (I.InitIterator(pDlg); I; I++)
    {
        if (I()->GetWindowTextLength() > 0)
        {
            I()->GetWindowText(str);
            StrTranslate(str);
            I()->SetWindowText(str);
        }
		CWnd* pW = I();
		if (pW && ::GetClassName(pW->m_hWnd, szClass, 10))
		{
			if (_tcsicmp(szClass, _T("COMBOBOX"))==0)
				CBTranslate(pW);
		}

    }
	return TRUE;
}
static TCHAR szTrans[MAX_TRANS];
static TCHAR szOrig[MAX_TRANS];
BOOL CDictionary::StrTranslate(CString& s)
{
	// strip {} marks
	int nLen = s.GetLength();
	if (nLen < 3 || nLen>= MAX_TRANS)
		return TRUE;
	
	LPCTSTR pStr = s;
	LPTSTR pStart= _tcsstr(pStr, START_MARK);
	if (!pStart)
		return TRUE;
	LPTSTR pCurNew = szTrans;
	while (1)
	{
		// copy pre string
		if (pStart)
		{
			int n = pStart-pStr;
			if (n>0)
			{
				memcpy(pCurNew, pStr, n*sizeof(TCHAR));
				pCurNew+=n;
			}
		}
		else	// copy last chars
		{
			if (*pStr)
				_tcscpy(pCurNew, pStr);
			else
				*pCurNew = 0;
			break;
		}
		pStart+=_tcslen(START_MARK);
		LPTSTR pEnd=_tcschr(pStart, END_MARK);
		if (pEnd)	// got closing bracket
		{
			*pEnd = 0;
			CString tr;
			int bFound = 0;
			if (m_Words.GetCount()==0)
			{
				bFound = -1;
			}
			else
				bFound = m_Words.Lookup(pStart, tr);
			if (bFound > 0 && !tr.IsEmpty())
				_tcscpy(pCurNew, tr);
			else
			{	// may be there is same without &?
				LPTSTR pT = NULL;
				if (bFound==0)
					_tcschr(pStart, '&');
				if (!pT)	// no &! or empty
					_tcscpy(pCurNew, pStart);
				else
				{
					TCHAR ch = *(pT+1);
					int nBefore = pT-pStart;
					if (nBefore)
						memcpy(szOrig, pStart, nBefore*sizeof(TCHAR));
					_tcscpy(szOrig+nBefore, pStart+nBefore+1);
					if (m_Words.Lookup(szOrig, tr) && !tr.IsEmpty())
					{	// same char for '&'
						nBefore = tr.Find(ch);
						if (nBefore>=0)
						{
							if (nBefore)
								memcpy(pCurNew, (LPCTSTR)tr, nBefore*sizeof(TCHAR));
							_tcscpy(pCurNew+nBefore, _T("&"));
							_tcscpy(pCurNew+nBefore+1, (LPCTSTR)tr + nBefore);
						}
						else
						{
							_tcscpy(pCurNew, _T("&"));
							_tcscpy(pCurNew+1, tr);
						}
					}
					else
						_tcscpy(pCurNew, pStart);
				}
			}
			pCurNew+=_tcslen(pCurNew);
			*pEnd = END_MARK;
		}
		else
			return FALSE;
		pStr = pEnd + 1;
		pStart = _tcsstr(pStr, START_MARK);
	}
	s = szTrans;
	return TRUE;
}
BOOL CDictionary::MenuTranslate(HMENU HM)
{
    ASSERT(HM);
    if (!HM)
        return FALSE;
	CUIntArray aStack;
	aStack.SetSize(0, 20);
	aStack.Add((UINT)HM);
	int nTop = 0;
    CString str;
	while (nTop>=0)
	{
		HMENU hm = (HMENU)aStack.GetAt(nTop);
		nTop--;
		int nItems = ::GetMenuItemCount(hm);
		MENUITEMINFO mi;
		for (int i=0; i<nItems; i++)
		{
			ZeroMemory(&mi, sizeof(mi));
			mi.cbSize = sizeof(mi);
			mi.fMask = MIIM_TYPE|MIIM_SUBMENU|MIIM_DATA;
			mi.dwTypeData = szOrig;
			mi.cch = MAX_TRANS;
			if (!GetMenuItemInfo(hm, i, TRUE, &mi))
				continue;
			if (mi.fType!= MFT_STRING )
				continue;
			// deal with submenu
			if (mi.hSubMenu)
			{
				aStack.SetAtGrow(++nTop, (UINT)mi.hSubMenu);
			}
			str = (LPCTSTR)mi.dwTypeData;
			StrTranslate(str);
			mi.dwTypeData = (LPTSTR)(LPCTSTR)str;
			SetMenuItemInfo(hm, i, TRUE, &mi);
		}
	}
	return TRUE;
}
void CDictionary::FindDictions(Dictions& aDics, LPCTSTR sP)
{
	CString sPath(sP);
	CString sBuf;
	LPTSTR pBuf = sBuf.GetBuffer(MAX_PATH*2);
	if (sP)
		_tcscpy(pBuf, sP);
	else
	{
		GetModuleFileName(NULL, pBuf, MAX_PATH*2);
		LPTSTR pEnd = _tcsrchr(pBuf, '\\');
		if (pEnd)
		{
			pEnd++;
			*pEnd = 0;
		}
	}
	DWORD dwDir = GetFileAttributes(pBuf);
	if (dwDir==(UINT)-1 || !(dwDir & FILE_ATTRIBUTE_DIRECTORY) )
	{
		sBuf.ReleaseBuffer();
		return;
	}
	LPTSTR pEnd = pBuf + _tcslen(pBuf);
	_tcscat(pBuf, _T("*.dic"));
	WIN32_FIND_DATA fd;
	HANDLE hFind = FindFirstFile(pBuf, &fd);
	if (hFind == INVALID_HANDLE_VALUE)
	{
		sBuf.ReleaseBuffer();
		return;
	}
	DicData dat;
	while (1)
	{
		_tcscpy(pEnd, fd.cFileName);
		if (CheckFile(pBuf, &dat, NULL))
		{
			aDics.Add(dat);
		}
		if (!FindNextFile(hFind , &fd))
			break;
	}
	FindClose(hFind);

	sBuf.ReleaseBuffer();
}
BOOL CDictionary::CheckFile(LPCTSTR sFileName, DicData* pData, CString* sFull )
{
	CString sFile(sFileName);
	// try to find file
	if (GetFileAttributes(sFileName)==(DWORD)-1)
	{
		LPTSTR pUnused = NULL;
		SearchPath(NULL, sFileName, NULL, MAX_PATH*2, sFile.GetBuffer(MAX_PATH*2),
			&pUnused);
		sFile.ReleaseBuffer();
	}
	CStdioFile file;
	if (!file.Open(sFile, CFile::modeRead|CFile::typeText, NULL))
		return FALSE;
	CString s;
	if (!file.ReadString(s))
		return FALSE;
	// WinDict
	CString sMark;
	GetMark(s, sMark);
	if (sMark.Find(DICT_MARK)!=0)
		return FALSE;
	if (!file.ReadString(s))
		return FALSE;
	if(!pData)
		return TRUE;
	TCHAR szExt[_MAX_EXT];
	_tsplitpath(sFile, NULL, NULL, pData->sFile.GetBuffer(MAX_PATH), szExt);
	pData->sFile.ReleaseBuffer();
	pData->sFile+=szExt;
	GetMark(s, pData->sLang);
	if (!file.ReadString(s))
		return FALSE;
	GetMark(s, pData->sAuthor);
	if (file.ReadString(s))
		GetMark(s, pData->sRem);
	if (sFull)
		*sFull = sFile;
	return TRUE;
}
DicData& DicData::operator=(const DicData& a)
{
	sLang = a.sLang;
	sFile = a.sFile;
	sAuthor = a.sAuthor;
	sRem = a.sRem;
	return *this;
}

void CDictionary::RemoveCRs(CString& sKey)
{
	if (sKey.IsEmpty() || sKey.Find(_T("\\n"))<0)
		return;
	LPTSTR pBuf = sKey.GetBuffer(sKey.GetLength());
	while (1)
	{
		LPTSTR pCR = _tcsstr(pBuf, _T("\\n"));
		if (!pCR)
			break;
		int nLen = _tcslen(pBuf);
		*pCR = 0x0A;
		int nCR = pCR-pBuf;
		memmove(pCR+1, pCR+2, (nLen-nCR-1)*sizeof(TCHAR));
		pBuf[nLen-1]=0;
	}
	sKey.ReleaseBuffer();
}
void CDictionary::AddEntry(CString& sKey, CString& sTrans)
{
	// remove \n
	RemoveCRs(sKey);
	RemoveCRs(sTrans);
	m_Words.SetAt(sKey, sTrans);
}

BOOL CDictionary::SheetTranslate(CPropertySheet* p)
{
	if (!p)
		return FALSE;
	// Translate caption
	CString		sTemp;
	p->GetWindowText(sTemp);
	StrTranslate(sTemp);
	p->SetWindowText(sTemp);

	static UINT nIDs[] = {IDOK, IDCANCEL, IDHELP, ID_APPLY_NOW};
	for (int j=0; j<4; j++)
	{
		CWnd	*pBtn = p->GetDlgItem( nIDs[j] );
		if (!pBtn)
			continue;
		LOAD_STRING(sTemp,  nIDs[j]);
		pBtn->SetWindowText(sTemp);
	}

	// Translate Tab text
	TC_ITEM		Item;
	Item.mask = TCIF_TEXT;
	Item.cchTextMax = 50;
	Item.pszText = new char[50];

	CTabCtrl* pTC = p->GetTabControl();
	ASSERT( pTC );

	for( int i = 0; i<pTC->GetItemCount(); i++ )
		if( pTC->GetItem( i, &Item) )
		{
			sTemp = Item.pszText; StrTranslate(sTemp);
			strncpy(Item.pszText, sTemp, Item.cchTextMax);
			pTC->SetItem( i, &Item);
		};
	delete [] Item.pszText;
	return TRUE;
}



#endif // _USE_DICTION_

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品一区免费在线观看| 欧美日韩国产高清一区二区三区| 中文字幕二三区不卡| 欧美性一级生活| 国产成人精品免费一区二区| 久久99精品一区二区三区三区| 亚洲午夜久久久久中文字幕久| 国产精品毛片久久久久久久| 国产欧美一区二区精品性色超碰| 久久久国际精品| 亚洲精品一线二线三线| 日韩免费一区二区| 91精品国产入口| 日韩一级精品视频在线观看| 欧美在线综合视频| 欧美精选在线播放| 欧美成人官网二区| 欧美激情在线看| 久久se精品一区精品二区| 国产一区二区免费视频| 波多野结衣欧美| 成人免费黄色大片| 91麻豆精东视频| 91国内精品野花午夜精品| 欧美艳星brazzers| 一区二区欧美视频| 日韩成人精品在线观看| 麻豆久久久久久| 99久久精品费精品国产一区二区| 精品视频999| 久久久久99精品国产片| 国产毛片精品国产一区二区三区| 久久综合九色综合欧美就去吻| 国产精品午夜春色av| 国产电影一区在线| 国产精品色哟哟| 成人a区在线观看| 欧美一区欧美二区| 美女看a上一区| 精品av久久707| 国产成人免费视频网站| 国产精品电影院| 日本不卡一区二区| 国产一区二区三区蝌蚪| 国产网红主播福利一区二区| 亚洲成人av在线电影| 国产风韵犹存在线视精品| 中文字幕电影一区| 欧美伊人精品成人久久综合97| 午夜久久久久久久久久一区二区| 国产精品小仙女| 成人免费在线视频| 狠狠网亚洲精品| 欧美日本国产视频| 蜜臀久久99精品久久久久久9| 精品国产91久久久久久久妲己| 国产盗摄精品一区二区三区在线| 中文一区二区在线观看| 欧美日韩一区二区在线观看| 青青草国产成人99久久| 中文成人av在线| 欧美日韩国产一级| 国产成人综合自拍| 亚洲一区二区精品视频| 波多野结衣中文字幕一区| 夜夜揉揉日日人人青青一国产精品| 制服丝袜av成人在线看| 亚洲电影一级片| 久久精品视频免费| 欧美日韩一级二级| 成人av网站大全| 视频在线在亚洲| 91精品在线一区二区| 大美女一区二区三区| 三级亚洲高清视频| 综合精品久久久| 在线精品观看国产| 国产精品一区二区免费不卡| 亚洲高清久久久| 国产精品视频第一区| 日韩欧美在线影院| 在线免费观看日本欧美| 国产suv精品一区二区三区| 国产日本欧美一区二区| 91精选在线观看| 色婷婷激情一区二区三区| 一区二区三区av电影| 国产欧美一区二区精品仙草咪| 欧美精品久久天天躁| 色一情一伦一子一伦一区| 国产成人在线免费观看| 另类小说图片综合网| 亚洲第一综合色| 亚洲欧美成aⅴ人在线观看| 精品视频全国免费看| 一本高清dvd不卡在线观看| 国产成人免费在线| 国产一区视频在线看| 美女视频免费一区| 日韩成人一区二区三区在线观看| 一区二区三区四区av| 亚洲激情欧美激情| 欧美一区二区三区性视频| 欧美亚洲国产bt| 欧美影院精品一区| 91久久精品午夜一区二区| av电影天堂一区二区在线| 成人av动漫网站| zzijzzij亚洲日本少妇熟睡| 成人免费视频免费观看| 国产99久久久国产精品潘金| 国产福利一区二区| 国产夫妻精品视频| 成人开心网精品视频| 成人av高清在线| 91天堂素人约啪| 色综合久久久久网| 欧美性一二三区| 欧美二区在线观看| 欧美v日韩v国产v| 久久久精品日韩欧美| 欧美国产日韩a欧美在线观看| 国产清纯美女被跳蛋高潮一区二区久久w| 亚洲精品一区二区三区香蕉| 国产片一区二区三区| 亚洲欧美福利一区二区| 亚洲成人精品在线观看| 日韩高清一级片| 国产精品亚洲视频| 99riav一区二区三区| 欧美日免费三级在线| 日韩欧美中文一区二区| 国产网站一区二区三区| 亚洲欧美日韩国产手机在线| 首页欧美精品中文字幕| 国产美女主播视频一区| 91蝌蚪porny九色| 欧美久久一二三四区| 精品久久久网站| 亚洲图片激情小说| 青青青伊人色综合久久| 成人午夜av电影| 欧美日韩视频第一区| 久久久不卡网国产精品一区| 亚洲日穴在线视频| 日本欧美在线看| 成人妖精视频yjsp地址| 欧美日韩久久一区| 久久久天堂av| 亚洲成av人片一区二区三区| 国产成人午夜高潮毛片| 欧美在线不卡视频| 久久久美女毛片| 亚洲成av人片一区二区| 丁香另类激情小说| 91精品国产欧美日韩| 国产精品国产a级| 久久se这里有精品| 欧美午夜免费电影| 国产精品久久久一本精品| 日韩影院精彩在线| 91丨porny丨在线| 久久久久亚洲综合| 丝袜美腿亚洲综合| 欧美综合亚洲图片综合区| 国产亲近乱来精品视频 | 美女视频黄 久久| 色综合中文字幕国产 | 7777精品伊人久久久大香线蕉最新版| 2023国产精品自拍| 石原莉奈在线亚洲二区| 色婷婷av久久久久久久| 日本一区二区免费在线观看视频| 日日夜夜免费精品视频| 色婷婷av一区二区| 亚洲欧洲另类国产综合| 国产乱码精品一品二品| 7777精品伊人久久久大香线蕉超级流畅 | 亚洲少妇屁股交4| 高清国产午夜精品久久久久久| 91精品国产综合久久婷婷香蕉 | 中文一区二区在线观看| 九九九精品视频| 91麻豆精品国产自产在线观看一区| 亚洲同性同志一二三专区| www.亚洲人| 国产精品福利一区| 成人av免费在线观看| 国产精品久久久久久亚洲伦 | 激情综合色综合久久综合| 7777精品伊人久久久大香线蕉的| 亚洲第一会所有码转帖| 欧美色综合网站| 午夜伊人狠狠久久| 欧美男女性生活在线直播观看| 亚洲第一久久影院| 欧美疯狂做受xxxx富婆| 美女视频黄免费的久久 | 日韩欧美一级片| 国产一区在线看|