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

📄 userddlg.cpp

📁 计算机英汉机器翻译系统中的英语词性标注方法实现
💻 CPP
字号:
// UserDDlg.cpp : implementation file
//

#include "stdafx.h"
//#include "Generate.h"
#include "userddlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// UserDDlg dialog


UserDDlg::UserDDlg(CWnd* pParent /*=NULL*/)
	: CDialog(UserDDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(UserDDlg)
	m_strAllDictList = _T("");
	m_strCurrentUseDict = _T("");
	//}}AFX_DATA_INIT

	strcpy(sCfgFileName,"DictRes\\UserDict.cfg");
	//RebuildCfgFile();
}


void UserDDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(UserDDlg)
	DDX_Control(pDX, IDC_DEFAULTDICTCOMBO, m_ctlCurrentUseDict);
	DDX_Control(pDX, IDC_ALLUSERDICTLIST, m_ctlAllDictList);
	DDX_LBString(pDX, IDC_ALLUSERDICTLIST, m_strAllDictList);
	DDX_CBString(pDX, IDC_DEFAULTDICTCOMBO, m_strCurrentUseDict);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(UserDDlg, CDialog)
	//{{AFX_MSG_MAP(UserDDlg)
	ON_BN_CLICKED(ID_NEW, OnNew)
	ON_BN_CLICKED(IDDEL, OnDel)
	ON_LBN_DBLCLK(IDC_ALLUSERDICTLIST, OnDblclkAlluserdictlist)
	ON_CBN_SELCHANGE(IDC_DEFAULTDICTCOMBO, OnSelchangeDefaultdictcombo)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// UserDDlg message handlers

BOOL UserDDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();

	if( !InitCfg() )
		return FALSE;
	
	return TRUE;
}


//#include "IndexDlg.h"
void UserDDlg::OnNew() 
{
	// TODO: Add your control notification handler code here
	CUserIndexDlg BuildUserIndexDlg;
	char sNewUserDict[255];

	if ( BuildUserIndexDlg.Go( sNewUserDict ) ){
		ReadCfgToArray();
		InitCfg( );
	}
}

void UserDDlg::OnDel() 
{
	// TODO: Add your control notification handler code here
	CString strMsg;

	UpdateData(TRUE);

	CString str;
	int nLine = m_ctlAllDictList.GetCurSel();
	if (nLine != LB_ERR )
		m_ctlAllDictList.GetText(nLine , str);
	else{
		AfxMessageBox( "请选择你要删除的词典索引!");
		return;
	}
	
	if( str.IsEmpty() || str.Find( "无" ) >= 0 )
		return;

	strMsg.Format("确实要删除词典索引 %s 吗?",str,MB_YESNO);
	if (AfxMessageBox(strMsg,MB_YESNO) == IDYES)
	{
		CString strTmp;
		strTmp = "DictRes\\" + str + ".dat";
		remove(strTmp);
		strTmp.Empty();
		strTmp = "DictRes\\" + str + ".dta";
		remove(strTmp);
		strTmp.Empty();
		strTmp = "DictRes\\" + str+ ".idx";
		remove(strTmp);
		strTmp.Empty();
		//RemoveDictFromCfg(m_strIndexName);
		
		DelDict( str.GetBuffer(50) );
		str.ReleaseBuffer();

		InitCfg();
	}
	UpdateData(FALSE);
}

void UserDDlg::OnOK() 
{
	// TODO: Add extra validation here
	UpdateData( TRUE );
	if( m_strCurrentUseDict.IsEmpty() ||
		m_strCurrentUseDict.Find( "不使用" )>=0 ){
		if( AfxMessageBox("未选用任何用户词典,退出吗",MB_YESNO) == IDNO)
			return;
		//else
			//SetActiveDict( "UserDict" );
	}
	else{
		SetActiveDict( m_strCurrentUseDict.GetBuffer(50) );
		m_strCurrentUseDict.ReleaseBuffer();
	}
	
	CDialog::OnOK();
}


//管理配置文件DictRes\\UserDict.cfg


BOOL UserDDlg::ModifyCfgFile(char *psDictName,char cMethor)
{
	//char sCurLine[1024];

	fpCfg = fopen(sCfgFileName,"w");
	if(!fpCfg){
		RebuildCfgFile();
		fpCfg = fopen(sCfgFileName,"w");
		if(!fpCfg)
			return FALSE;
	}
	for(int i = 0; i < MaxUserDictNum ; i ++)
	{

		if( cMethor == '2' && m_strCfg[i].GetAt( 9 ) == '2' )
			m_strCfg[i].SetAt(9,'1');

		if(m_strCfg[i].Find(psDictName) >= 0){
			m_strCfg[i].SetAt(9,cMethor);
		}
		
		fputs(m_strCfg[i].GetBuffer( 50 ) , fpCfg);
		m_strCfg[i].ReleaseBuffer( );

	}
	fclose(fpCfg);

	return TRUE;
}

BOOL UserDDlg::DelDict(char *psDictName)
{
	return ModifyCfgFile(psDictName,'0');
}

BOOL UserDDlg::AddDict(char *psDictName)
{
	return ModifyCfgFile(psDictName,'1');
}

BOOL UserDDlg::SetActiveDict(char *psDictName)
{
	return ModifyCfgFile(psDictName,'2');
}

BOOL UserDDlg::GetActiveDict(char *psDictName)
{
	char sCurLine[1024];
	CString m_strCurLine;
	
	fpCfg = fopen(sCfgFileName,"r");
	if(!fpCfg){
		RebuildCfgFile();
		fpCfg = fopen(sCfgFileName,"r");
		if(!fpCfg)
			return FALSE;
	}

	for(int i = 0; i < MaxUserDictNum && !feof(fpCfg); i ++)
	{
		//m_strCurLine.Empty();
		fgets(sCurLine,1024,fpCfg);
		m_strCfg[i] = sCurLine;
		if(m_strCfg[i].Find( "=2" ) >= 0){
			strcpy(psDictName,m_strCfg[i].Left(8));
			return TRUE;
		}
	}

	return FALSE;
}

BOOL UserDDlg::RebuildCfgFile()
{
	fpCfg = fopen( sCfgFileName , "w");
	if( !fpCfg ){
		return FALSE;
	}

	fputs("UserDic0=0",fpCfg);
	fputs("UserDic1=0",fpCfg);
	fputs("UserDic2=0",fpCfg);
	fputs("UserDic3=0",fpCfg);
	fputs("UserDic4=0",fpCfg);
	fputs("UserDic5=0",fpCfg);
	fputs("UserDic6=0",fpCfg);
	fputs("UserDic7=0",fpCfg);
	fputs("UserDic8=0",fpCfg);
	fputs("UserDic9=0",fpCfg);
	fputs("UserDict=0",fpCfg);
	fclose(fpCfg);

	return TRUE;
}

BOOL UserDDlg::FindDict( char *psDicName )
{
	for(int i = 0; i < MaxUserDictNum ; i++)
	{
		if( m_strCfg[i] . Find( psDicName ) >= 0 )
		{
			if( m_strCfg[i] . GetAt(9) =='1' ||
				m_strCfg[i] . GetAt(9) =='2' )
				return TRUE;
			else
				return FALSE;
		}
	}
	return FALSE;
}

BOOL UserDDlg::ReadCfgToArray()
{
	char sCurLine[100];
	
	int nDictNum = 0;
	fpCfg = fopen(sCfgFileName,"r");
	if(!fpCfg){
		RebuildCfgFile();
		return FALSE;
	}
	
	for(int i = 0; i < MaxUserDictNum && !feof(fpCfg); i++){
		fgets(sCurLine,1024,fpCfg);
		m_strCfg[i].Empty();
		m_strCfg[i] = sCurLine;
	}
	fclose(fpCfg);
	return TRUE;
}


BOOL UserDDlg::InitCfg()
{		
	if( !ReadCfgToArray() )
		return FALSE;

	char ch;
	int nDictNum = 0;
	BOOL bUseUserDict = FALSE;

	//清空屏幕内容
	m_ctlCurrentUseDict.ResetContent();
	m_ctlAllDictList.ResetContent();
	m_ctlCurrentUseDict.AddString("<不使用用户词典>");

	for(int i = 0; i<MaxUserDictNum ; i++){		
		if( m_strCfg[i].Find("UserDict") >=0 )
			continue;
		
		ch = m_strCfg[i].GetAt(9);
		switch (ch){
			case '0':
				break;
			case '1':
				m_ctlAllDictList.AddString(m_strCfg[i].Left(8));
				m_ctlCurrentUseDict.AddString(m_strCfg[i].Left(8));
				nDictNum ++;
				break;
			case '2':
				m_ctlAllDictList.AddString(m_strCfg[i].Left(8));
				m_ctlCurrentUseDict.AddString(m_strCfg[i].Left(8));				
				m_strCurrentUseDict . Empty();
				m_strCurrentUseDict = m_strCfg[i].Left(8);
				nDictNum ++;
				bUseUserDict = TRUE;
				break;
			default:
				break;
		}
	}
	
	if( nDictNum == 0 )
		m_ctlAllDictList.AddString("<无用户词典>");
	if( !bUseUserDict ){
		m_strCurrentUseDict . Empty();
		m_strCurrentUseDict = "<不使用用户词典>";
	}
	
	UpdateData(FALSE);
	return TRUE;
}

void UserDDlg::OnDblclkAlluserdictlist() 
{
	// TODO: Add your control notification handler code here
	CString str;
	m_ctlAllDictList.GetText(m_ctlAllDictList.GetCurSel(), str);	
	m_strCurrentUseDict.Empty();
	if( str.Find( "无" ) >=0 ){
		m_strCurrentUseDict = "<不使用用户词典>";
	}
	else{
		m_strCurrentUseDict = str;
		SetActiveDict( m_strCurrentUseDict.GetBuffer(50) );
		m_strCurrentUseDict . ReleaseBuffer();
	}

	UpdateData( FALSE );
}		

void UserDDlg::OnSelchangeDefaultdictcombo() 
{
	// TODO: Add your control notification handler code here
	UpdateData( TRUE );
	
	SetActiveDict( m_strCurrentUseDict.GetBuffer(50) );
	m_strCurrentUseDict . ReleaseBuffer();
	UpdateData( FALSE );
}

⌨️ 快捷键说明

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