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

📄 barpieview.cpp

📁 图像编程的参考资料
💻 CPP
字号:
// BarPieView.cpp : implementation file
//

#include "stdafx.h"
#include "GrDemo.h"
#include "GrDemoDoc.h"
#include "BarPieView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CBarPieView

IMPLEMENT_DYNCREATE(CBarPieView, CView)

CBarPieView::CBarPieView()
{
	m_pGraph	= &m_BarLine;
	m_bMemDraw	= true;
	m_bTitle	= true;
	m_bLegend	= true;
	m_bBoundary	= false;
	m_bGrid		= true;
	m_bVertical = true;
	m_Types		= LINE;
}

CBarPieView::~CBarPieView()
{
}


BEGIN_MESSAGE_MAP(CBarPieView, CView)
	//{{AFX_MSG_MAP(CBarPieView)
	ON_WM_ERASEBKGND()
	ON_WM_SIZE()
	ON_COMMAND(ID_TYPE_GRID, OnTypeGrid)
	ON_UPDATE_COMMAND_UI(ID_TYPE_GRID, OnUpdateTypeGrid)
	ON_COMMAND(ID_TYPE_BOUNDARY, OnTypeBoundary)
	ON_UPDATE_COMMAND_UI(ID_TYPE_BOUNDARY, OnUpdateTypeBoundary)
	ON_COMMAND(ID_TYPE_LEGEND, OnTypeLegend)
	ON_UPDATE_COMMAND_UI(ID_TYPE_LEGEND, OnUpdateTypeLegend)
	ON_COMMAND(ID_TYPE_BACKCOLOR, OnTypeBackcolor)
	ON_UPDATE_COMMAND_UI(ID_TYPE_BACKCOLOR, OnUpdateTypeBackcolor)
	ON_COMMAND(ID_TYPE_TITLE, OnTypeTitle)
	ON_UPDATE_COMMAND_UI(ID_TYPE_TITLE, OnUpdateTypeTitle)
	ON_COMMAND(ID_TYPE_MEMORYDRAW, OnTypeMemorydraw)
	ON_UPDATE_COMMAND_UI(ID_TYPE_MEMORYDRAW, OnUpdateTypeMemorydraw)
	ON_COMMAND(ID_TYPES_LINE, OnTypesLine)
	ON_UPDATE_COMMAND_UI(ID_TYPES_LINE, OnUpdateTypesLine)
	ON_COMMAND(ID_TYPES_BAR, OnTypesBar)
	ON_UPDATE_COMMAND_UI(ID_TYPES_BAR, OnUpdateTypesBar)
	ON_COMMAND(ID_TYPES_BAR3D, OnTypesBar3d)
	ON_UPDATE_COMMAND_UI(ID_TYPES_BAR3D, OnUpdateTypesBar3d)
	ON_COMMAND(ID_TYPES_GANTTBAR, OnTypesGanttbar)
	ON_UPDATE_COMMAND_UI(ID_TYPES_GANTTBAR, OnUpdateTypesGanttbar)
	ON_COMMAND(ID_TYPES_PIE, OnTypesPie)
	ON_UPDATE_COMMAND_UI(ID_TYPES_PIE, OnUpdateTypesPie)
	ON_COMMAND(ID_TYPES_CUTPIE, OnTypesCutpie)
	ON_UPDATE_COMMAND_UI(ID_TYPES_CUTPIE, OnUpdateTypesCutpie)
	ON_COMMAND(ID_DIRECTION_VERTICAL, OnDirectionVertical)
	ON_UPDATE_COMMAND_UI(ID_DIRECTION_VERTICAL, OnUpdateDirectionVertical)
	ON_COMMAND(ID_DIRECTION_HORIZONTAL, OnDirectionHorizontal)
	ON_UPDATE_COMMAND_UI(ID_DIRECTION_HORIZONTAL, OnUpdateDirectionHorizontal)
	//}}AFX_MSG_MAP
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

void CBarPieView::DrawFrame(CRect& rect, COLORREF cr, const char* Title)
{
	m_pGraph->RecalcRects(rect);
	if (m_bBoundary)
		m_pGraph->DrawBoundary(cr, 2);
	if (m_bTitle)
		m_pGraph->Title(Title);
}

/////////////////////////////////////////////////////////////////////////////
// CBarPieView drawing

void CBarPieView::OnDraw(CDC* pDC)
{
	CGrDemoDoc* pDoc = GetDocument();

	CRect rect;
	if (pDC->IsPrinting())
	{
		rect.left = rect.top = 0;
		rect.right  = pDC->GetDeviceCaps(HORZRES);
		rect.bottom = pDC->GetDeviceCaps(VERTRES);
		m_pGraph->SetPrintScale(pDC->m_hDC, rect);
	}
	else
		GetClientRect(rect);

	

	m_pGraph->BeginDraw(pDC->m_hDC);

	switch(m_Types)
	{
	case LINE:
		DrawFrame(rect, RGB(255, 0, 255), "Line");
		m_pGraph->Line(m_bGrid, PS_SOLID, 3);
		break;
	case BAR:
		DrawFrame(rect, RGB(255, 0, 255), "Bar");
		m_pGraph->Bar(m_bGrid, m_bVertical);
		break;
	case BAR3D:
		DrawFrame(rect, RGB(255, 0, 255), "Bar 3D");
		m_pGraph->Bar3D(m_bGrid, m_bVertical);
		break;
	case GANTTBAR:
		DrawFrame(rect, RGB(255, 0, 255), "Gantt Bar");
		m_pGraph->GanttBar(m_bGrid, m_bVertical);
		break;
	case PIE:
		DrawFrame(rect, RGB(255, 0, 255), "Pie");
		m_Pie.CutPie(pDoc->x, 5, pDoc->colstr, false);
		break;
	case CUTPIE:
		DrawFrame(rect, RGB(255, 0, 255), "Cut Pie");
		m_Pie.CutPie(pDoc->x, 5, pDoc->colstr);
		break;
	}

	m_pGraph->EndDraw(pDC->m_hDC);
}

/////////////////////////////////////////////////////////////////////////////
// CBarPieView printing

BOOL CBarPieView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CBarPieView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CBarPieView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CBarPieView diagnostics

#ifdef _DEBUG
void CBarPieView::AssertValid() const
{
	CView::AssertValid();
}

void CBarPieView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CGrDemoDoc* CBarPieView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CGrDemoDoc)));
	return (CGrDemoDoc*)m_pDocument;
}
#endif //_DEBUG

void CBarPieView::Redraw()
{
	RECT rect;
	GetClientRect(&rect);
	m_pGraph->RecalcRects(rect);
	Invalidate();
}

/////////////////////////////////////////////////////////////////////////////
// CBarPieView message handlers

BOOL CBarPieView::OnEraseBkgnd(CDC* pDC) 
{
	if (!m_pGraph->m_bMemoryDraw)
		return CView::OnEraseBkgnd(pDC) ;
	
	return TRUE;

}

void CBarPieView::OnSize(UINT nType, int cx, int cy) 
{
	CView::OnSize(nType, cx, cy);
	
	RECT rect;
	GetClientRect(&rect);
	m_pGraph->RecalcRects(rect);
}

void CBarPieView::OnTypeGrid() 
{
	m_bGrid = !m_bGrid;
	Redraw();
}

void CBarPieView::OnUpdateTypeGrid(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_bGrid);
	pCmdUI->Enable(m_Types < PIE);
}

void CBarPieView::OnTypeBoundary() 
{
	m_bBoundary = !m_bBoundary;
	Redraw();
}

void CBarPieView::OnUpdateTypeBoundary(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_bBoundary);
}

void CBarPieView::OnTypeLegend() 
{
	m_bLegend = !m_bLegend;
	m_pGraph->EnableLegend(m_bLegend);
	Redraw();
}

void CBarPieView::OnUpdateTypeLegend(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_bLegend);
}

void CBarPieView::OnTypeBackcolor() 
{
	// CColorDialog bug under the debug version
	CColorDialog cDlg(m_nBkColor, CC_FULLOPEN | CC_ANYCOLOR, this);
	if (cDlg.DoModal() == IDOK)
	{
		m_nBkColor = cDlg.GetColor();
		m_pGraph->SetBackColor(m_nBkColor);
		Redraw();
	}
}

void CBarPieView::OnUpdateTypeBackcolor(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	
}

void CBarPieView::OnTypeTitle() 
{
	m_bTitle = !m_bTitle;
	Redraw();
}

void CBarPieView::OnUpdateTypeTitle(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_bTitle);
}

void CBarPieView::OnTypeMemorydraw() 
{
	m_bMemDraw = !m_bMemDraw;
	m_pGraph->EnableMemoryDraw(m_bMemDraw);
	Redraw();
}

void CBarPieView::OnUpdateTypeMemorydraw(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_bMemDraw);
}

void CBarPieView::OnTypesLine() 
{
	m_Types  = LINE;
	m_pGraph = &m_BarLine;
	Redraw();
}

void CBarPieView::OnUpdateTypesLine(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_Types == LINE);
}

void CBarPieView::OnTypesBar() 
{
	m_Types  = BAR;
	m_pGraph = &m_BarLine;
	Redraw();
}

void CBarPieView::OnUpdateTypesBar(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_Types == BAR);
}

void CBarPieView::OnTypesBar3d() 
{
	m_Types  = BAR3D;
	m_pGraph = &m_BarLine;
	Redraw();
}

void CBarPieView::OnUpdateTypesBar3d(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_Types == BAR3D);
}

void CBarPieView::OnTypesGanttbar() 
{
	m_Types  = GANTTBAR;
	m_pGraph = &m_BarLine;
	Redraw();
}

void CBarPieView::OnUpdateTypesGanttbar(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_Types == GANTTBAR);
}

void CBarPieView::OnTypesPie() 
{
	m_Types  = PIE;
	m_pGraph = &m_Pie;
	Redraw();
}

void CBarPieView::OnUpdateTypesPie(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_Types == PIE);
}

void CBarPieView::OnTypesCutpie() 
{
	m_Types  = CUTPIE;
	m_pGraph = &m_Pie;
	Redraw();
}

void CBarPieView::OnUpdateTypesCutpie(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_Types == CUTPIE);
}

void CBarPieView::OnDirectionVertical() 
{
	m_bVertical = true;
	Redraw();
}

void CBarPieView::OnUpdateDirectionVertical(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(!m_bVertical && m_Types > LINE && m_Types < PIE);
}

void CBarPieView::OnDirectionHorizontal() 
{
	m_bVertical = false;
	Redraw();
}

void CBarPieView::OnUpdateDirectionHorizontal(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(m_bVertical && m_Types > LINE && m_Types < PIE);
}

void CBarPieView::OnInitialUpdate() 
{
	CView::OnInitialUpdate();
	
	CGrDemoDoc* pDoc = GetDocument();
	m_nBkColor = m_pGraph->GetBackColor();
	m_pGraph->EnableMemoryDraw(m_bMemDraw);
	m_pGraph->EnableLegend(m_bLegend);
	m_pGraph->SetBackColor(m_nBkColor);
	m_pGraph->SetData(pDoc->RawData, 3, 5, pDoc->rowstr, pDoc->colstr);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -