📄 bitmapdlg.cpp
字号:
// bitmapdlg.cpp : implementation file
//
#include "stdafx.h"
#include "studentwin.h"
#include "bitmapdlg.h"
#include "GraphSeries.h"
#include "GraphLegend.h"
#include "Graph.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// Cbitmapdlg dialog
Cbitmapdlg::Cbitmapdlg(CWnd* pParent /*=NULL*/)
: CDialog(Cbitmapdlg::IDD, pParent)
{
type=1;
graphcom=false;
testGraph=NULL;
//{{AFX_DATA_INIT(Cbitmapdlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void Cbitmapdlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(Cbitmapdlg)
DDX_Control(pDX, IDC_bitmap, m_bitmap);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(Cbitmapdlg, CDialog)
//{{AFX_MSG_MAP(Cbitmapdlg)
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// Cbitmapdlg message handlers
BOOL Cbitmapdlg::OnInitDialog()
{
CDialog::OnInitDialog();
// CRect rect;
//GetClientRect(&rect);
//m_bitmap.MoveWindow(&rect);
///////////////
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void Cbitmapdlg::drawpicture()
{
switch(type)
{
case 1:drawbar();break;
case 2:drawpie();break;
default:break;
}
}
void Cbitmapdlg::drawbar()
{
Cstudent*pstudent;
long score1=0;
long score2=0;
long score3=0;
long score4=0;
pDoc->curpos=pDoc->m_dataList.GetHeadPosition();
while(pDoc->curpos!=NULL)
{
pstudent=pDoc->m_dataList.GetAt(pDoc->curpos);
score1=score1+pstudent->lesson[0].fen;
score2=score2+pstudent->lesson[1].fen;
score3=score3+pstudent->lesson[2].fen;
score4=score4+pstudent->lesson[3].fen;
pDoc->m_dataList.GetNext(pDoc->curpos);
if(pDoc->curpos==NULL)
break;
}
score1/=couter;
score2/=couter;
score3/=couter;
score4/=couter;
testGraph=new CGraph();
testGraph->SetGraphTitle("每门课程平均成绩的统计");
testGraph->SetTickRange(100);
testGraph->SetTickSpace(25);
testGraph->SetXAxisAlignment(0);
testGraph->SetXAxisLabel("课程");
testGraph->SetYAxisLabel("分数");
pDoc->curpos=pDoc->m_dataList.GetHeadPosition();
pstudent=pDoc->m_dataList.GetAt(pDoc->curpos);
CGraphSeries* series1 = new CGraphSeries();
CGraphSeries* series2 = new CGraphSeries();
CGraphSeries* series3 = new CGraphSeries();
CGraphSeries* series4 = new CGraphSeries();
series1->SetLabel(pstudent->lesson[0].name);
series2->SetLabel(pstudent->lesson[1].name);
series3->SetLabel(pstudent->lesson[2].name);
series4->SetLabel(pstudent->lesson[3].name);
series1->SetData(0,score1);
series2->SetData(0, score2);
series3->SetData(0, score3);
series4->SetData(0, score4);
testGraph->AddSeries(series1);
testGraph->AddSeries(series2);
testGraph->AddSeries(series3);
testGraph->AddSeries(series4);
//set up legend
pDoc->curpos=pDoc->m_dataList.GetHeadPosition();
pstudent=pDoc->m_dataList.GetAt(pDoc->curpos);
testGraph->SetLegend(1, "分数");
testGraph->SetLegend(0, "分数");
testGraph->SetLegend(2, "分数");
testGraph->SetLegend(3, "分数");
}
void Cbitmapdlg::drawpie()
{
Cstudent*pstudent;
int lesson1[5]={0,0,0,0,0};
int lesson2[5]={0,0,0,0,0};
int lesson3[5]={0,0,0,0,0};
int lesson4[5]={0,0,0,0,0};
pDoc->curpos=pDoc->m_dataList.GetHeadPosition();
while(pDoc->curpos!=NULL)
{
pstudent=pDoc->m_dataList.GetAt(pDoc->curpos);
/////////////////
if(pstudent->lesson[0].fen<60)
lesson1[0]++;
if(pstudent->lesson[0].fen>=60&&pstudent->lesson[0].fen<=69)
lesson1[1]++;
if(pstudent->lesson[0].fen>=70&&pstudent->lesson[0].fen<=79)
lesson1[2]++;
if(pstudent->lesson[0].fen>=80&&pstudent->lesson[0].fen<=89)
lesson1[3]++;
if(pstudent->lesson[0].fen>=90&&pstudent->lesson[0].fen<=100)
lesson1[4]++;
if(pstudent->lesson[1].fen<60)
lesson2[0]++;
if(pstudent->lesson[1].fen>=60&&pstudent->lesson[0].fen<=69)
lesson2[1]++;
if(pstudent->lesson[1].fen>=70&&pstudent->lesson[0].fen<=79)
lesson2[2]++;
if(pstudent->lesson[1].fen>=80&&pstudent->lesson[0].fen<=89)
lesson2[3]++;
if(pstudent->lesson[1].fen>=90&&pstudent->lesson[0].fen<=100)
lesson2[4]++;
if(pstudent->lesson[2].fen<60)
lesson3[0]++;
if(pstudent->lesson[2].fen>=60&&pstudent->lesson[0].fen<=69)
lesson3[1]++;
if(pstudent->lesson[2].fen>=70&&pstudent->lesson[0].fen<=79)
lesson3[2]++;
if(pstudent->lesson[2].fen>=80&&pstudent->lesson[0].fen<=89)
lesson3[3]++;
if(pstudent->lesson[2].fen>=90&&pstudent->lesson[0].fen<=100)
lesson3[4]++;
if(pstudent->lesson[3].fen<60)
lesson4[0]++;
if(pstudent->lesson[3].fen>=60&&pstudent->lesson[0].fen<=69)
lesson4[1]++;
if(pstudent->lesson[3].fen>=70&&pstudent->lesson[0].fen<=79)
lesson4[2]++;
if(pstudent->lesson[3].fen>=80&&pstudent->lesson[0].fen<=89)
lesson4[3]++;
if(pstudent->lesson[3].fen>=90&&pstudent->lesson[0].fen<=100)
lesson4[4]++;
/////////
pDoc->m_dataList.GetNext(pDoc->curpos);
if(pDoc->curpos==NULL)
break;
}
testGraph=new CGraph(2);
testGraph->SetGraphTitle("各科60以下,60-69,70-79,80-89,90-100的人数比例");
testGraph->SetLegend(3, "80-89");
testGraph->SetLegend(0, "60分以下");
testGraph->SetLegend(1, "60-69");
testGraph->SetLegend(2, "70-79");
testGraph->SetLegend(4, "90-100");
CGraphSeries* series1 = new CGraphSeries();
CGraphSeries* series2 = new CGraphSeries();
CGraphSeries* series3 = new CGraphSeries();
CGraphSeries* series4 = new CGraphSeries();
pDoc->curpos=pDoc->m_dataList.GetHeadPosition();
pstudent=pDoc->m_dataList.GetAt(pDoc->curpos);
series1->SetLabel(pstudent->lesson[0].name);
series2->SetLabel(pstudent->lesson[1].name);
series3->SetLabel(pstudent->lesson[2].name);
series4->SetLabel(pstudent->lesson[3].name);
series1->SetData(0,lesson1[0]);
series1->SetData(1,lesson1[1]);
series1->SetData(2,lesson1[2]);
series1->SetData(3, lesson1[3]);
series1->SetData(4, lesson1[4]);
series2->SetData(0,lesson2[0]);
series2->SetData(1,lesson2[1]);
series2->SetData(2,lesson2[2]);
series2->SetData(3, lesson2[3]);
series2->SetData(4, lesson2[4]);
series3->SetData(0,lesson3[0]);
series3->SetData(1,lesson3[1]);
series3->SetData(2,lesson3[2]);
series3->SetData(3, lesson3[3]);
series3->SetData(4, lesson3[4]);
series4->SetData(0,lesson4[0]);
series4->SetData(1,lesson4[1]);
series4->SetData(2,lesson4[2]);
series4->SetData(3, lesson4[3]);
series4->SetData(4, lesson4[4]);
testGraph->AddSeries(series1);
testGraph->AddSeries(series2);
testGraph->AddSeries(series3);
testGraph->AddSeries(series4);
}
void Cbitmapdlg::OnButton1()
{
drawpicture();
CWnd*pwnd=GetDlgItem(IDC_bitmap);
CDC*pDC=pwnd->GetDC();
testGraph->DrawGraph(pDC);
UpdateData(false);
ReleaseDC(pDC);
}
void Cbitmapdlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
// Do not call CDialog::OnPaint() for painting messages
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -