📄 userddlg.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 + -