📄 fencidlg.cpp
字号:
// FenCiDlg.cpp : implementation file
//
#include "stdafx.h"
#include "HLSwknlTool.h"
#include "FenCiDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CFenCiDlg dialog
CFenCiDlg::CFenCiDlg(CWnd* pParent /*=NULL*/)
: CDialog(CFenCiDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CFenCiDlg)
m_strSegSource = _T("");
m_strSegResult = _T("");
//}}AFX_DATA_INIT
}
void CFenCiDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CFenCiDlg)
DDX_Control(pDX, IDC_RICHEDIT_SEGRESULT, m_cSegResult);
DDX_Text(pDX, IDC_EDIT_SEGSOURCE, m_strSegSource);
DDX_Text(pDX, IDC_RICHEDIT_SEGRESULT, m_strSegResult);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CFenCiDlg, CDialog)
//{{AFX_MSG_MAP(CFenCiDlg)
ON_BN_CLICKED(IDC_BUTTON_SEGLOAD, OnButtonLoad)
ON_BN_CLICKED(IDC_BUTTON_SEGANALYSE, OnButtonAnalyse)
ON_BN_CLICKED(IDC_BUTTON_SEGERASE, OnButtonErase)
ON_WM_CAPTURECHANGED()
ON_WM_CLOSE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFenCiDlg message handlers
BOOL CFenCiDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
((CButton*)GetDlgItem(IDC_RADIO_SEARCHMODE))->SetCheck(BST_CHECKED);
((CButton*)GetDlgItem(IDC_RADIO_MARKMODE))->SetCheck(BST_UNCHECKED);
((CButton*)GetDlgItem(IDC_RADIO_SEARCHMODE))->SetWindowText("检索模式");
((CButton*)GetDlgItem(IDC_RADIO_MARKMODE))->SetWindowText("语意计算模式");
GetDlgItem(IDC_BUTTON_SEGLOAD)->SetWindowText("载入(&L)");
GetDlgItem(IDC_BUTTON_SEGANALYSE)->SetWindowText("分析(&S)");
GetDlgItem(IDC_BUTTON_SEGERASE)->SetWindowText("清空(&E)");
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CFenCiDlg::OnButtonLoad()
{
// TODO: Add your control notification handler code here
UpdateData();
//选择文件
CFileDialog cdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"文本文件(*.txt)|*.txt|All File(*.*)|*.*||",this);
if(cdlg.DoModal()==IDOK)
{
CFile file ;
CString strFile = cdlg.GetFileName();
if(!file.Open(strFile,CFile::modeRead))//打开选择的文件
{
AfxMessageBox("文件打开失败!");
return ;
}
int nLen = file.GetLength();//获得文件长度
LPSTR lpTemp = m_strSegSource.GetBuffer(nLen+1);
file.Read(lpTemp,nLen);//读取文件内容
lpTemp[nLen] = _T('\0');
m_strSegSource.ReleaseBuffer() ;
file.Close();
m_strSegResult = "";
m_cSegResult.SetWindowText("");
UpdateData(FALSE);//显示在界面中
}
}
void CFenCiDlg::OnButtonAnalyse()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_strSegResult = "";
m_cSegResult.SetWindowText(" ");
///打开分词句柄
HANDLE hHandle = HLOpenSplit();
if(hHandle == INVALID_HANDLE_VALUE)
{
AfxMessageBox("分词句柄打开失败!");
return ;
}
int nExtra = 0;
nExtra |= HL_CAL_OPT_POS;
UINT nMode = GetCheckedRadioButton(IDC_RADIO_SEARCHMODE,IDC_RADIO_MARKMODE);
if (nMode == IDC_RADIO_SEARCHMODE)
nExtra |= HL_CAL_OPT_SEARCH;
DWORD dwStart = GetTickCount();
bool bOK = HLSplitWord(hHandle,(LPCTSTR)m_strSegSource,nExtra);//进行分词
if (!bOK)
{
AfxMessageBox("分词失败!");
return ;
}
DWORD dwEnd = GetTickCount();
CString strMsg ;
strMsg.Format("字节:%d 耗时:%dms",m_strSegSource.GetLength(),(dwEnd-dwStart));
AfxMessageBox(strMsg);
int nCnt = 0 ;
nCnt= HLGetWordCnt(hHandle) ;//获得分词结果个数
SHLSegWord* pWord = NULL ;
for(int i = 0 ; i < nCnt ; i++)
{//获得分词结果
CString strWord;
pWord = HLGetWordAt(hHandle,i);//获得指定的分词结果
strWord = pWord->s_szWord ;
AddNatureColour(strWord,pWord->s_dwPOS);
}//for i
HLCloseSplit(hHandle);//关闭分词句柄
//UpdateData(FALSE);
}
void CFenCiDlg::OnButtonErase()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_strSegSource = _T("");
GetDlgItem(IDC_EDIT_SEGSOURCE)->SetFocus();
m_strSegResult = _T("");
m_cSegResult.SetWindowText("");
UpdateData(FALSE);
}
BOOL CFenCiDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if ((pMsg->message == WM_KEYDOWN) && (pMsg->wParam == VK_ESCAPE))
return true;
return CDialog::PreTranslateMessage(pMsg);
}
void CFenCiDlg::AddNatureColour(CString &strWord, DWORD dwPOS)
{
COLORREF crText;
if((dwPOS & NATURE_A_NS) == NATURE_A_NS)
{
crText = COL_PLACESTR;
}
else if((dwPOS & NATURE_D_N) == NATURE_D_N)
{
crText = COL_NOUN;
}
else if((dwPOS & NATURE_A_NR) == NATURE_A_NR)
{
crText = COL_NAME;
}
else if((dwPOS & NATURE_D_E) == NATURE_D_E)
{
crText = COL_PRODUCTSTR;
}
else if((dwPOS & NATURE_D_MQ) == NATURE_D_MQ)
{
crText = COL_QUANTITY;
}
else if((dwPOS & NATURE_D_V) == NATURE_D_V)
{
crText = COL_VERB;
}
else if((dwPOS & NATURE_D_T) == NATURE_D_T)
{
crText = COL_TIME;
}
else if((dwPOS & NATURE_A_NT) == NATURE_A_NT)
{
crText = COL_ORGANIZATIONSTR;
}
else
{
crText = COL_EXTERN;
}
CString strSegResult;
m_cSegResult.GetWindowText(strSegResult);
int iTextLen = m_cSegResult.GetWindowTextLength();
if(iTextLen > 0)
m_cSegResult.SetSel((iTextLen - 1)*sizeof(TCHAR), (iTextLen - 1) * sizeof(TCHAR));
CHARFORMAT cf;
cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask = CFM_COLOR;
cf.dwEffects = 0;
cf.crTextColor = crText;
m_cSegResult.SetSelectionCharFormat(cf);
strWord += _T(" ");
m_cSegResult.ReplaceSel(strWord);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -