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

📄 paintvw.cpp

📁 API经典入门
💻 CPP
字号:
// paintvw.cpp : implementation of the CPaintView class
//

#include "stdafx.h"
#include "paint.h"

#include "paintdoc.h"
#include "paintvw.h"

#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CPaintView

IMPLEMENT_DYNCREATE(CPaintView, CView)

BEGIN_MESSAGE_MAP(CPaintView, CView)
	//{{AFX_MSG_MAP(CPaintView)
	ON_WM_LBUTTONDOWN()
	ON_COMMAND(ID_OPTIONS_BCOLORS, OnOptionsBcolors)
	ON_COMMAND(ID_OPTIONS_PCOLORS, OnOptionsPcolors)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPaintView construction/destruction

CPaintView::CPaintView()
{
	// TODO: add construction code here
}

CPaintView::~CPaintView()
{
}

/////////////////////////////////////////////////////////////////////////////
// CPaintView drawing
void CPaintView::DrawPoint (CDC* pDC, int AtX, int AtY)
{
	pDC->Ellipse(AtX-5, AtY-5, AtX+5, AtY+5);
	pDC->MoveTo(AtX-10, AtY);
	pDC->LineTo(AtX+10, AtY);
	pDC->MoveTo(AtX, AtY-10);
	pDC->LineTo(AtX, AtY+10);
}


void CPaintView::OnDraw(CDC* pDC)
{
	CPaintDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	
	int i;
	CPoint P1, P2; // temporary points

	pDC->TextOut(100, 100, "This is the Paint Demo program!!");
	
	// TODO: add draw code for native data here
	if (pDoc->m_nArraySize <= 0)
		return;
		
	// draw points (if selected)
	if (pDoc->m_bDrawPoints)
		for (i = 0; i < pDoc->m_nArraySize; i++)
		{
			P1 = pDoc->m_acPoints[i];
			DrawPoint(pDC, P1.x, P1.y);
		}
    
    pDC->SetBkColor(RGB(255,0,0));
    
    // set colors
    CPen pen(pDoc->m_nPStyle,0,pDoc->m_nPColor);
	CPen* pOldPen = pDC->SelectObject(&pen);
	
	CBrush brush;
	if (pDoc->m_nBStyle == -1) // if solid brush
		brush.CreateSolidBrush(pDoc->m_nBColor);
	else
		brush.CreateHatchBrush(pDoc->m_nBStyle, pDoc->m_nBColor);
	CBrush brush2(RGB(255,0,0));
	CBrush* pOldBrush = pDC->SelectObject(&brush);
	
	// set polyfillmode: ALTERNATE or WINDING
	pDC->SetPolyFillMode(pDoc->m_nPolyFill); 
	
	// set ROP2 mode
	pDC->SetROP2(pDoc->m_nROP2Mode);
	//pDC->SetROP2(R2_MERGEPEN);
	//pDC->SetROP2(R2_NOTMERGEPEN);
   	//pDC->SetROP2(R2_XORPEN);

	switch (pDoc->m_nShape)
	{
		case NO_SHAPE:
		// no shape selected
		break;
		
		case ELLIPSE:
		for (i = 0; i < pDoc->m_nArraySize/2; i++)
		{
			P1 = pDoc->m_acPoints[2*i];
			P2 = pDoc->m_acPoints[2*i+1];
			pDC->Ellipse(P1.x, P1.y, 
					P2.x, P2.y);
		}
		break;
		
		case RECTANGLE:
		for (i = 0; i < pDoc->m_nArraySize/2; i++)
		{
			P1 = pDoc->m_acPoints[2*i];
			P2 = pDoc->m_acPoints[2*i+1];
			pDC->Rectangle(P1.x, P1.y, 
					P2.x, P2.y);
		}
		
		// Add focus to last rectangle drawn
		{CRect R(P1.x, P1.y, P2.x, P2.y);
		//pDC->DrawFocusRect(R);}
		//pDC->InvertRect(R);}
		pDC->FrameRect(R, &brush2);}

		break;
		
		case ROUNDRECT:
		for (i = 0; i < pDoc->m_nArraySize/2; i++)
		{
			P1 = pDoc->m_acPoints[2*i];
			P2 = pDoc->m_acPoints[2*i+1];
			pDC->RoundRect(P1.x, P1.y, 
					P2.x, P2.y, 30, 50);
		}
		break;

		case ARC:
		for (i = 0; i < pDoc->m_nArraySize/4; i++)
		{
			P1 = pDoc->m_acPoints[4*i];
			P2 = pDoc->m_acPoints[4*i+1];
			CPoint P3 = pDoc->m_acPoints[4*i+2];
			CPoint P4 = pDoc->m_acPoints[4*i+3];
			pDC->Arc(P1.x, P1.y, 
					P2.x, P2.y,
					P3.x, P3.y,
					P4.x, P4.y);
		}
		break;
		
		case CHORD:
		for (i = 0; i < pDoc->m_nArraySize/4; i++)
		{
			P1 = pDoc->m_acPoints[4*i];
			P2 = pDoc->m_acPoints[4*i+1];
			CPoint P3 = pDoc->m_acPoints[4*i+2];
			CPoint P4 = pDoc->m_acPoints[4*i+3];
			pDC->Chord(P1.x, P1.y, 
					P2.x, P2.y,
					P3.x, P3.y,
					P4.x, P4.y);
		}
		break;
		
		case PIE:
		for (i = 0; i < pDoc->m_nArraySize/4; i++)
		{
			P1 = pDoc->m_acPoints[4*i];
			P2 = pDoc->m_acPoints[4*i+1];
			CPoint P3 = pDoc->m_acPoints[4*i+2];
			CPoint P4 = pDoc->m_acPoints[4*i+3];
			pDC->Pie(P1.x, P1.y, 
					P2.x, P2.y,
					P3.x, P3.y,
					P4.x, P4.y);
		}
		break;
		
		case POLYLINE:
		if (pDoc->m_nArraySize >= 2)
			pDC->Polyline(pDoc->m_acPoints,
						pDoc->m_nArraySize);
		break;
		
		
		case POLYGON:
		if (pDoc->m_nArraySize >= 2)
			pDC->Polygon(pDoc->m_acPoints,
						pDoc->m_nArraySize);
		break;
		
		default:
		break;
	}
	
	pDC->SelectObject(pOldPen);
	pDC->SelectObject(pOldBrush);
}

/////////////////////////////////////////////////////////////////////////////
// CPaintView diagnostics

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

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

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

/////////////////////////////////////////////////////////////////////////////
// CPaintView message handlers


void CPaintView::OnLButtonDown(UINT nFlags, CPoint point)
{
	
	CPaintDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	pDoc->m_nTopElement++;
	pDoc->m_nTopElement %= MAX_SIZE;
	
	pDoc->m_acPoints[pDoc->m_nTopElement] = point;
	if (pDoc->m_nArraySize < MAX_SIZE)
		pDoc->m_nArraySize++;
	
	pDoc->UpdateAllViews(NULL);
}

void CPaintView::OnOptionsBcolors()
{
	CPaintDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	
	CColorDialog Dlg;
	
	if (Dlg.DoModal() == IDOK)
	{
		pDoc->m_nBColor = Dlg.GetColor();
		pDoc->UpdateAllViews(NULL);
	}
	
}

void CPaintView::OnOptionsPcolors()
{
	CPaintDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	
	CColorDialog Dlg;
	
	if (Dlg.DoModal() == IDOK)
	{
		pDoc->m_nPColor = Dlg.GetColor();
		pDoc->UpdateAllViews(NULL);
	}
}

⌨️ 快捷键说明

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