📄 detreesvmdlg.cpp
字号:
else
{
f.Close();//关闭
m_progress.SetRange(0,80);
m_progress.SetPos(0);
m_strText = "测试中...";
UpdateData(FALSE);
int j=0;
int nTemp1[KINDNUMBER]={0,0,0,0};
for(int i=0; i<KINDNUMBER+1; i++)//将数据转存进行运算
{
nTemp[i] = nKindNumber[i];
}
while(nTemp[0] != 0)
{
int max=0;//临时变量
int index=0;
//找出样本数量最多的类别
for(int i=1;i<=4;i++)
{
if(max<nTemp[i])
{
max=nTemp[i];
index=i;
}
}
nTemp[index]=0;
nTemp1[j]=index;
j++;
nTemp[0]--;
}
CTest test( nKindNumber[0], nVectorItemNumber,nTemp1 );//创建一个对象
if( test.Testing() )//测试完成
{
m_strText = "测试完毕!";
UpdateData(FALSE);
m_progress.SetPos(0);
AfxMessageBox("测试完毕!",MB_OK);
//设置按钮状态
m_Button_Display.EnableWindow(TRUE);
m_Button_Eva.EnableWindow(TRUE);
}
else//测试出错
{
m_strText = "没有成功进行测试!";
UpdateData(FALSE);
}
}
}
}
/********************************************************************
// 创建日期 : 2008-5-19 16:32:33
// 作 者 : 祝美莲<zml123818@163.com>
// 函数名称 : CDeTreeSVMDlg::OnButtonEva
// 函数功能 : 评测分类系统的性能
// 返回类型 : void
********************************************************************/
void CDeTreeSVMDlg::OnButtonEva()
{
// TODO: Add your control notification handler code here
CString strNameResult;
strNameResult = "\\result.txt";
strNameResult = pPath+strNameResult;
CFileFind f;
BOOL bWorking=f.FindFile(strNameResult);
if(!bWorking)//没有找到结果文件
{
AfxMessageBox("没有结果文件,请先测试!",MB_ICONSTOP);
}
else
{
f.Close();
CEvaluateDlg dlg;
dlg.DoModal();//调用对话框
}
}
/********************************************************************
// 创建日期 : 2008-5-19 16:33:23
// 作 者 : 祝美莲<zml123818@163.com>
// 函数名称 : CDeTreeSVMDlg::DeletePage
// 函数功能 : 删除网页
// 返回类型 : void
// 函数参数 : int k
// 函数参数 : int nNumber
********************************************************************/
void CDeTreeSVMDlg::DeletePage(int k,int nNumber)
{
int a;//临时变量
//找到类别为 k 的第一个网页
int i=0;
while(k != Page[i].GetType())
{
i++;
}
a = i;
//将该类网页删除
for(i=a;i<nPageNumber;i++)
{
if((i+nNumber) <= nPageNumber)
Page[i] = Page[i+nNumber];
else
return;
}
}
/********************************************************************
// 创建日期 : 2008-5-19 16:33:45
// 作 者 : 祝美莲<zml123818@163.com>
// 函数名称 : CDeTreeSVMDlg::OnDblclkTree
// 函数功能 : 双击树形控件的响应函数
// 返回类型 : void
// 函数参数 : NMHDR* pNMHDR
// 函数参数 : LRESULT* pResult
********************************************************************/
void CDeTreeSVMDlg::OnDblclkTree(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
CString str;
//删除列表中原先的显示的所有数据 以及表头信息
m_listCtrl.DeleteAllItems();
int nHeadNum = m_listCtrl.GetHeaderCtrl()->GetItemCount();
for(int i=nHeadNum-1;i>=0;i--)
m_listCtrl.DeleteColumn(i);
//重写表头
m_listCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
m_listCtrl.InsertColumn(0,"名称",LVCFMT_IMAGE|LVCFMT_LEFT);
m_listCtrl.InsertColumn(1,"类别",LVCFMT_CENTER);
m_listCtrl.InsertColumn(2,"存放地址",LVCFMT_LEFT);
//设置行高
CImageList m_l;
m_l.Create(1,15,TRUE|ILC_COLOR32,1,0);
m_listCtrl.SetImageList(&m_l,LVSIL_SMALL);
//设置列表各列的宽度
m_listCtrl.SetColumnWidth(0,80);
m_listCtrl.SetColumnWidth(1,80);
m_listCtrl.SetColumnWidth(2,135);
//得到双击的条目
HTREEITEM hItem = m_TreeCtrl.GetSelectedItem();
str = m_TreeCtrl.GetItemText(hItem);
//得到完整路径
char pBuf[MAX_PATH];//存放路径的变量
strcpy(pBuf,pPath);
strcat(pBuf,"\\结果文件夹\\");
//判断选中的条目,将文件拷贝到结果文件夹对应的地方
if( str == "01教育类" )
{
strcat(pBuf,"1类网页");
FindFiles(pBuf);
}
else if( str == "02娱乐类" )
{
strcat(pBuf,"2类网页");
FindFiles(pBuf);
}
else if( str == "03时尚类" )
{
strcat(pBuf,"3类网页");
FindFiles(pBuf);
}
else if( str == "04计算机类" )
{
strcat(pBuf,"4类网页");
FindFiles(pBuf);
}
*pResult = 0;
}
/********************************************************************
// 创建日期 : 2008-5-19 16:36:28
// 作 者 : 祝美莲<zml123818@163.com>
// 函数名称 : CDeTreeSVMDlg::FindFiles
// 函数功能 : 查找文件
// 返回类型 : void
// 函数参数 : CString strPathName
********************************************************************/
void CDeTreeSVMDlg::FindFiles(CString strPathName)
{
//定义相关变量
int i = 0;
CFileFind finder;
BOOL bWorking = finder.FindFile(strPathName+"\\*.*");//判断是否已经寻找完所有文件
//通过递归的方式查询文件夹中的内容,这是因为有的文件夹中还
//包含子文件夹
while( bWorking )
{
bWorking = finder.FindNextFile();
//是文件夹,跳过
if(finder.IsDots())
{
continue;
}
//子文件夹,递归查找
else if(finder.IsDirectory())
{
FindFiles(finder.GetFilePath());
}
//查找到的就是文件
else
{
//定义相关变量
CString strPath;//文件路径
CString strFileName;//文件名
CString strType;//网页类别
//得到文件名,文件大小以及路径
strFileName = finder.GetFileName();
strPath = strPathName+"\\"+finder.GetFileName();
//获取网页的类别
int nPos;
nPos = strPathName.ReverseFind('\\');
if( nPos == -1 )
nPos = strPathName.ReverseFind('/');
strType = strPathName.Right(strPathName.GetLength() - nPos - 1);
//插入行
m_listCtrl.InsertItem(i,strFileName);//文件名
m_listCtrl.SetItemText(i,1,strType);//网页类别
m_listCtrl.SetItemText(i++,2,strPath);//路径
}
}
finder.Close(); //关闭设备
}
/********************************************************************
// 创建日期 : 2008-5-19 16:39:21
// 作 者 : 祝美莲<zml123818@163.com>
// 函数名称 : CDeTreeSVMDlg::OnDblclkList
// 函数功能 : 响应双击列表控件的函数
// 返回类型 : void
// 函数参数 : NMHDR* pNMHDR
// 函数参数 : LRESULT* pResult
********************************************************************/
void CDeTreeSVMDlg::OnDblclkList(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
HD_NOTIFY *phdn = (HD_NOTIFY *) pNMHDR;
//存放文件存放的路径
CString strNamePath;
//获得表头信息
LVCOLUMN lvcol;
char char1[256];
CString str;
lvcol.mask = LVCF_TEXT;
lvcol.pszText = char1;
lvcol.cchTextMax = 256;
m_listCtrl.GetColumn(0,&lvcol);
str=lvcol.pszText;//获得表头的第一项
//表头第一项是“名称”同时选中了一个条目时,打开该网页
if( (str=="名称") && phdn->iItem > -1)
{
strNamePath = m_listCtrl.GetItemText(phdn->iItem,2);
ShellExecute(this->m_hWnd,"open",strNamePath,NULL,NULL,SW_SHOWNORMAL); //打开文件
}
*pResult = 0;
}
/********************************************************************
// 创建日期 : 2008-5-19 16:41:11
// 作 者 : 祝美莲<zml123818@163.com>
// 函数名称 : CDeTreeSVMDlg::GetFileNumber
// 函数功能 : 获得文件夹中网页的个数
// 返回类型 : int
// 函数参数 : CString strPathName
********************************************************************/
int CDeTreeSVMDlg::GetFileNumber(CString strPathName)
{
//定义相关变量
int i = 0;
CFileFind finder;
int nFileNumber = 0;
BOOL bWorking = finder.FindFile(strPathName+"\\*.*");//判断是否已经寻找完所有文件
//通过递归的方式查询文件夹中的
while( bWorking )
{
bWorking = finder.FindNextFile();
//上一级的文件夹跳过
if(finder.IsDots())
{
continue;
}
//子文件夹,递归查找
else if(finder.IsDirectory())
{
GetFileNumber(finder.GetFilePath());
}
//查找到的就是文件,统计文件数目
else
{
nFileNumber++;
}
}
finder.Close();
return nFileNumber;
}
/********************************************************************
// 创建日期 : 2008-5-19 16:42:22
// 作 者 : 祝美莲<zml123818@163.com>
// 函数名称 : CDeTreeSVMDlg::OnInitDialog
// 函数功能 : 初始化对话框
// 返回类型 : BOOL
********************************************************************/
BOOL CDeTreeSVMDlg::OnInitDialog()
{
CDialog::OnInitDialog();
p=this;
// TODO: Add extra initialization here
//初始化分类时间控件
GetDlgItem(IDC_STATIC_TIME)->SetWindowText("");
GetDlgItem(IDC_STATIC_TEXT)->SetWindowText("欢迎使用!!");
//变量初始化
nPageNumber = 0;
nVectorItemNumber = 0;
nFlag=0;
nFlag1=0;
for( int i = 0; i < KINDNUMBER + 1; i++ )
{
nKindNumber[i] = 0;
nTemp[i] = 0;
}
for( i = 0; i < VECTORITEMNUMBER; i++ )
{
nTNumber[i] = 0;
}
// TODO: Add extra initialization here
//设置按钮状态
m_Button_Train.EnableWindow(FALSE);
//如果向量模型已经存在,可以直接进行测试
CString strModName;
strModName = pPath;
strModName = strModName + "\\向量机模型";
CFileFind f;
if( !f.FindFile(strModName) )
{
m_Button_Test.EnableWindow(FALSE);
}
//如果结果文件夹存在,可以直接显示结果
CString strResultName;
strResultName = pPath;
strResultName = strResultName + "\\结果文件夹";
if(!f.FindFile(strResultName))
{
m_Button_Display.EnableWindow(FALSE);
}
f.Close();
//如果结果文件“result.txt”存在,可以直接评测分类结果
strResultName = pPath;
strResultName = strResultName + "\\result.txt";
if(!f.FindFile(strResultName))
{
m_Button_Eva.EnableWindow(FALSE);
}
f.Close();//关闭设备
//初始化树控件
HTREEITEM hItem = m_TreeCtrl.InsertItem(_T("所有类别"),0,1);
m_TreeCtrl.InsertItem(_T("01教育类"),0,1,hItem,TVI_LAST);
m_TreeCtrl.InsertItem(_T("02娱乐类"),0,1,hItem,TVI_LAST);
m_TreeCtrl.InsertItem(_T("03时尚类"),0,1,hItem,TVI_LAST);
m_TreeCtrl.InsertItem(_T("04计算机类"),0,1,hItem,TVI_LAST);
//初始化列表控件
m_listCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
m_listCtrl.EnableTips();
m_listCtrl.InsertColumn(0,"网页类别",LVCFMT_IMAGE|LVCFMT_CENTER);
m_listCtrl.SetColumnWidth(0,155);
m_listCtrl.InsertColumn(1," 网页数目统计",LVCFMT_CENTER);
m_listCtrl.SetColumnWidth(1,160);
//提示的功能实现
m_pToolTip = new CToolTipCtrl;
m_pToolTip->Create(this);
m_pToolTip->AddTool(GetDlgItem(IDC_BUTTON_READTRAINSET),_T("读取训练集,也可以直接用默认训练集打开!"));
m_pToolTip->AddTool(GetDlgItem(IDC_BUTTON_TRAIN),_T("训练得到支持向量"));
m_pToolTip->AddTool(GetDlgItem(IDC_BUTTON_TEST),_T("测试支持向量机,判断分类结果是否正确"));
m_pToolTip->AddTool(GetDlgItem(IDC_BUTTON_DISPLAY),_T("显示分类结果,统计各类的网页个数"));
m_pToolTip->AddTool(GetDlgItem(IDC_BUTTON_EVA),_T("评测分类结果,分别用列表图形表示"));
m_pToolTip->Activate(TRUE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
/********************************************************************
// 创建日期 : 2008-6-1 8:53:32
// 作 者 : 祝美莲<zml123818@163.com>
// 函数名称 : CDeTreeSVMDlg::PreTranslateMessage
// 函数功能 : 传递消息
// 返回类型 : BOOL
// 函数参数 : MSG* pMsg
********************************************************************/
BOOL CDeTreeSVMDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(m_pToolTip)
{
m_pToolTip->RelayEvent(pMsg);//显示提示信息
}
return CDialog::PreTranslateMessage(pMsg);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -