📄 paintvw.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 + -