⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 detreesvmview.cpp

📁 网页分类器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -