📄 leftview.cpp
字号:
// LeftView.cpp : implementation of the CLeftView class
//
#include "stdafx.h"
#include "svmcls.h"
#include "svmclsDoc.h"
#include "LeftView.h"
#include "svmclsView.h"
#include "classifier.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CLeftView
IMPLEMENT_DYNCREATE(CLeftView, CTreeView)
BEGIN_MESSAGE_MAP(CLeftView, CTreeView)
//{{AFX_MSG_MAP(CLeftView)
ON_WM_CREATE()
ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CTreeView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CTreeView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CTreeView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLeftView construction/destruction
CLeftView::CLeftView()
{
// TODO: add construction code here
}
CLeftView::~CLeftView()
{
}
BOOL CLeftView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CTreeView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CLeftView drawing
void CLeftView::OnDraw(CDC* pDC)
{
CSvmclsDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CLeftView printing
BOOL CLeftView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CLeftView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CLeftView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
void CLeftView::OnInitialUpdate()
{
CTreeView::OnInitialUpdate();
m_hImageList.DeleteImageList();
m_hImageList.Create(16,16,NULL,2,0);
CBitmap bm;
bm.LoadBitmap(IDB_IMAGELIST);
m_hImageList.Add(&bm,(COLORREF)0x0);
bm.DeleteObject();
CTreeCtrl &tc=GetTreeCtrl();
tc.SetImageList(&m_hImageList,TVSIL_NORMAL);
ListTrain();
}
BOOL CLeftView::ListTrain()
{
CTreeCtrl& tc=GetTreeCtrl();
HTREEITEM hItem=tc.GetSelectedItem();
if(hItem!=NULL) tc.SetItemState(hItem,~TVIS_SELECTED,TVIS_SELECTED);
tc.DeleteAllItems();
TV_INSERTSTRUCT tvis;
tvis.hParent=TVI_ROOT;
tvis.hInsertAfter=TVI_LAST;
tvis.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
tvis.item.iImage=0;
tvis.item.iSelectedImage=0;
tvis.item.pszText=_T("文本分类器");
m_hItemRoot=tc.InsertItem(&tvis);
m_hItemCatalog=tc.InsertItem(_T("类别"),1,1,m_hItemRoot);
m_hItemWord=tc.InsertItem(_T("特征项"),2,2,m_hItemRoot);
m_hItemTrain=tc.InsertItem(_T("训练样本"),2,2,m_hItemRoot);
m_hItemTest=tc.InsertItem(_T("测试样本"),2,2,m_hItemRoot);
tc.Expand(m_hItemRoot,TVE_EXPAND);
tc.SelectItem(m_hItemRoot);
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CLeftView diagnostics
#ifdef _DEBUG
void CLeftView::AssertValid() const
{
CTreeView::AssertValid();
}
void CLeftView::Dump(CDumpContext& dc) const
{
CTreeView::Dump(dc);
}
CSvmclsDoc* CLeftView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSvmclsDoc)));
return (CSvmclsDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CLeftView message handlers
int CLeftView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
lpCreateStruct->style |= TVS_HASLINES | TVS_HASBUTTONS|TVS_LINESATROOT ;
if (CTreeView::OnCreate(lpCreateStruct) == -1)
return -1;
return 0;
}
void CLeftView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
CTreeCtrl& tc=GetTreeCtrl();
HTREEITEM hItem=pNMTreeView->itemNew.hItem;
if(hItem==NULL) return;
HTREEITEM hParentItem=tc.GetParentItem(hItem);
CSvmclsDoc* pDoc = GetDocument();
CString strContent;
if(hItem==m_hItemRoot)
{
theClassifier.m_paramClassifier.GetParamString(strContent);
}
else if(hItem==m_hItemTrain)
{
POSITION pos_cata = theClassifier.m_lstTrainCatalogList.GetFirstPosition();
if(pos_cata != NULL)
{
CString tmp;
int sum=0;
strContent="类别名称 文档数\r\n";
while(pos_cata != NULL) // for each catalog
{
//取类列表中的每一个类
CCatalogNode& catanode = theClassifier.m_lstTrainCatalogList.GetNext(pos_cata);
tmp.Format("%-30s%d\r\n",catanode.m_strCatalogName,catanode.GetDocNum());
strContent=strContent+tmp;
sum+=catanode.GetDocNum();
}
tmp.Format("\r\n%-30s%d","文档总数:",sum);
strContent=strContent+tmp;
}
else
strContent="请先打开一个分类模型文件!";
}
else if(hItem==m_hItemTest)
{
POSITION pos_cata = theClassifier.m_lstTestCatalogList.GetFirstPosition();
if(pos_cata != NULL)
{
CString tmp;
int sum=0;
strContent="类别名称 文档数\r\n";
POSITION pos_cata = theClassifier.m_lstTestCatalogList.GetFirstPosition();
while(pos_cata != NULL) // for each catalog
{
//取类列表中的每一个类
CCatalogNode& catanode = theClassifier.m_lstTestCatalogList.GetNext(pos_cata);
tmp.Format("%-30s%d\r\n",catanode.m_strCatalogName,catanode.GetDocNum());
strContent=strContent+tmp;
sum+=catanode.GetDocNum();
}
tmp.Format("\r\n%-30s%d","文档总数:",sum);
strContent=strContent+tmp;
}
else
strContent="请先指定需要进行分类的文件!";
}
else if (hItem==m_hItemCatalog)
{
POSITION pos_cata = theClassifier.m_lstTrainCatalogList.GetFirstPosition();
if(pos_cata != NULL)
{
CString tmp;
strContent="类别ID 类别名称\r\n";
while(pos_cata != NULL) // for each catalog
{
//取类列表中的每一个类
CCatalogNode& catanode = theClassifier.m_lstTrainCatalogList.GetNext(pos_cata);
tmp.Format("%-14d%s\r\n",catanode.m_idxCata,catanode.m_strCatalogName);
strContent=strContent+tmp;
}
tmp.Format("\r\n%s%d","类别总数:",theClassifier.m_lstTrainCatalogList.GetCataNum());
strContent=strContent+tmp;
}
else
strContent="请先打开一个分类模型文件!";
}
else if(hItem==m_hItemWord)
{
POSITION pos_word = theClassifier.m_lstTrainWordList.GetFirstPosition();
if(pos_word != NULL)
{
CString tmp;
strContent="特征ID 特征名称\r\n";
while(pos_word != NULL) // for each catalog
{
//取类列表中的每一个类
CWordNode& wordnode = theClassifier.m_lstTrainWordList.GetNext(pos_word,tmp);
tmp.Format("%-14d%s\r\n",wordnode.m_nWordID,tmp);
strContent=strContent+tmp;
}
tmp.Format("\r\n%s%d","特征总数:",theClassifier.m_lstTrainWordList.GetCount());
strContent=strContent+tmp;
}
else
strContent="请先打开一个分类模型文件!";
}
CSvmclsView *pView=GetSvmclsView();
if(pView!=NULL)
pView->SetWindowText(strContent);
}
void CLeftView::SetContent(char * fname)
{
CSvmclsView *pView=GetSvmclsView();
if(pView!=NULL)
{
CSvmclsDoc* pDoc=(CSvmclsDoc*)pView->GetDocument();
CFile fin;
if(!fin.Open(fname,CFile::modeRead))
{
CString temp=fname;
AfxMessageBox(_T("文件")+temp+"不存在!");
return;
}
DWORD flen=fin.GetLength();
char *buffer=new char[flen+1];
flen=fin.ReadHuge(buffer,flen);
buffer[flen]='\0';
pView->SetWindowText(buffer);
fin.Close();
delete[] buffer;
}
}
CSvmclsView* CLeftView::GetSvmclsView()
{
CSvmclsView* pView=NULL;
CSvmclsDoc* pDoc = GetDocument();
POSITION pos = pDoc->GetFirstViewPosition();
while (pos != NULL)
{
CView *pViews = pDoc->GetNextView(pos);
if(pViews->IsKindOf(RUNTIME_CLASS(CSvmclsView)))
pView=(CSvmclsView*)pViews;
}
return pView;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -