📄 detreesvmview.cpp
字号:
// DeTreeSVMView.cpp : implementation of the CDeTreeSVMView class
//
#include "stdafx.h"
#include "DeTreeSVM.h"
#include "DeTreeSVMDoc.h"
#include "DeTreeSVMView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define KINDNUMBER 4
/////////////////////////////////////////////////////////////////////////////
// CDeTreeSVMView
IMPLEMENT_DYNCREATE(CDeTreeSVMView, CScrollView)
BEGIN_MESSAGE_MAP(CDeTreeSVMView, CScrollView)
//{{AFX_MSG_MAP(CDeTreeSVMView)
ON_COMMAND(ID_CURVE, OnCurve)
ON_COMMAND(ID_RECT, OnRect)
ON_UPDATE_COMMAND_UI(ID_RECT, OnUpdateRect)
ON_UPDATE_COMMAND_UI(ID_CURVE, OnUpdateCurve)
ON_COMMAND(ID_CLEAN, OnClean)
ON_COMMAND(ID_MENUCURE, OnCurve)
ON_UPDATE_COMMAND_UI(ID_MENUCURE, OnUpdateCurve)
ON_COMMAND(ID_MENURECT, OnRect)
ON_UPDATE_COMMAND_UI(ID_MENURECT, OnUpdateRect)
ON_COMMAND(ID_BUTTON_CLEAN, OnClean)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDeTreeSVMView construction/destruction
CDeTreeSVMView::CDeTreeSVMView()
{
// TODO: add construction code here
m_bCurve = FALSE;
m_bRect = FALSE;
CStdioFile mFile;//文件操作
int nTotal[KINDNUMBER];//分类之后各个类别的文件数目
int nRight[KINDNUMBER];//判断正确的各个类别的文件数目
int nTotalTest[KINDNUMBER];//测试集中各个类别的网页总数
//赋初值
for( int i = 0; i < KINDNUMBER; i++ )
{
nTotal[i] = 0;
nRight[i] = 0;
nTotalTest[i] = 0;
dPrecision[i] = 0;
dRecall[i] = 0;
dF1[i] = 0;
}
CString strFileName;
strFileName = pPath;
strFileName+="\\result.txt";
//判断是否有“result.txt”文件
if(mFile.Open(strFileName,CFile::modeRead) == 0)
{
AfxMessageBox("找不到相应文件!",MB_ICONSTOP);
}
CArchive ar(&mFile,CArchive::load);
for( i = 0; i < KINDNUMBER; i++ )
{
ar >> nTotal[i];
ar >> nRight[i];
ar >> nTotalTest[i];
if( nTotal[i] != 0)
{
dPrecision[i]=(double)nRight[i] / nTotal[i];//计算查准率
}
//查全率
if( nTotalTest[i] != 0)
{
dRecall[i]=(double)nRight[i] / nTotalTest[i];//计算查全率
}
//F1测试值
dF1[i]=(dPrecision[i]*dRecall[i]*2) / (dPrecision[i]+dRecall[i]);
}
ar.Close();
mFile.Close();
}
CDeTreeSVMView::~CDeTreeSVMView()
{
}
BOOL CDeTreeSVMView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CScrollView::PreCreateWindow(cs);
}
/********************************************************************
// 创建日期 : 2008-5-21 16:00:21
// 作 者 : 祝美莲<zml123818@163.com>
// 函数名称 : CDeTreeSVMView::OnInitialUpdate
// 函数功能 : 添加滚动条的范围
// 返回类型 : void
********************************************************************/
void CDeTreeSVMView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CSize sizeTotal;
// TODO: calculate the total size of this view
sizeTotal.cx = 800;
sizeTotal.cy = 500;
SetScrollSizes(MM_TEXT, sizeTotal);
}
/////////////////////////////////////////////////////////////////////////////
// CDeTreeSVMView drawing
/********************************************************************
// 创建日期 : 2008-5-21 8:39:40
// 作 者 : 祝美莲<zml123818@163.com>
// 函数名称 : CDeTreeSVMView::OnDraw
// 函数功能 : 重画
// 返回类型 : void
// 函数参数 : CDC* pDC
********************************************************************/
void CDeTreeSVMView::OnDraw(CDC* pDC)
{
CDeTreeSVMDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
if(m_bCurve)
{
this->OnCurve();
}
if(m_bRect)
{
this->OnRect();
}
}
/////////////////////////////////////////////////////////////////////////////
// CDeTreeSVMView printing
BOOL CDeTreeSVMView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CDeTreeSVMView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CDeTreeSVMView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CDeTreeSVMView diagnostics
#ifdef _DEBUG
void CDeTreeSVMView::AssertValid() const
{
CScrollView::AssertValid();
}
void CDeTreeSVMView::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
/********************************************************************
// 创建日期 : 2008-5-19 15:49:15
// 作 者 : 祝美莲<zml123818@163.com>
// 函数名称 : CDeTreeSVMView::GetDocument
// 函数功能 : 获得Document
// 返回类型 : CDeTreeSVMDoc*
********************************************************************/
CDeTreeSVMDoc* CDeTreeSVMView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDeTreeSVMDoc)));
return (CDeTreeSVMDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CDeTreeSVMView message handlers
/********************************************************************
// 创建日期 : 2008-5-20 14:38:52
// 作 者 : 祝美莲<zml123818@163.com>
// 函数名称 : CDeTreeSVMView::OnCurve
// 函数功能 : 画折线图
// 返回类型 : void
********************************************************************/
void CDeTreeSVMView::OnCurve()
{
// TODO: Add your command handler code here
//定义画笔画刷
HPEN hP;
HBRUSH hBr;
CFont font;
CDC *pDC=this->GetDC();
OnPrepareDC(pDC);
COLORREF color[4];
color[0]=RGB(220,20,60);
color[1]=RGB(255,0,255);
color[2]=RGB(255,255,0);
color[3]=RGB(0,250,154);
//画图
hP=(HPEN)GetStockObject(BLACK_PEN);
hBr=(HBRUSH)GetStockObject(DKGRAY_BRUSH);
pDC->SetTextColor(RGB(0,0,255));
font.CreateFont(14,7,0,0,0,FALSE,FALSE,0, ANSI_CHARSET,OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS,"宋体");
pDC->TextOut(300,10,"分类结果的图形表示");
pDC->SelectObject(&font);
pDC->SelectObject(hBr);
pDC->SelectObject(hP);
pDC->SetBkMode(TRANSPARENT);
//画坐标系
CPoint point1(50,435);
pDC->MoveTo(point1);
pDC->LineTo(600,point1.y);
pDC->MoveTo(point1);
pDC->LineTo(point1.x,260);
//画箭头
pDC->MoveTo((point1.x-5),265);
pDC->LineTo(point1.x,260);
pDC->MoveTo(point1.x,260);
pDC->LineTo((point1.x+5),265);
pDC->MoveTo(595,(point1.y+5));
pDC->LineTo(600,point1.y);
pDC->MoveTo(595,(point1.y-5));
pDC->LineTo(600,point1.y);
pDC->TextOut(600,440,"类别");
int i,j,l=0;
pDC->MoveTo(point1);
for(i=0;i<KINDNUMBER;i++)
{
j=point1.x+10+i*40;
l=point1.y-(int)(dPrecision[i]*150);
hP=CreatePen(PS_SOLID,1,RGB(0,0,0));
hBr=CreateSolidBrush(color[i]);
pDC->SelectObject(hBr);//设置画笔
pDC->SelectObject(hP);
pDC->LineTo(j+10,l);//画线
pDC->Ellipse(j+5,l-5,j+15,l+5);//画点
CString str;
int m = (int)(dPrecision[i]*100+0.5);
str.Format("%d",m);
str = str + "%";
pDC->TextOut(j,(l-15),str);//输出查准率
str.Format("%d",(i+1));
str = str + "类";
pDC->TextOut(j+7,440,str);
}
pDC->TextOut(100,310,"查准率");
//画查全率对应的折线图
int a = j+50;
pDC->MoveTo(a,point1.y);//初始点
for(i=0;i<KINDNUMBER;i++)
{
j=a+10+i*40;
l=point1.y-(int)(dRecall[i]*150);
hP=CreatePen(PS_SOLID,1,RGB(0,0,0));
hBr=CreateSolidBrush(color[i]);
pDC->SelectObject(hBr);//设置画笔
pDC->SelectObject(hP);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -