paintview.cpp
来自「Visual_C++.NET实用编程百例」· C++ 代码 · 共 307 行
CPP
307 行
// paintView.cpp : CpaintView 类的实现
//
#include "stdafx.h"
#include "paint.h"
#include "paintDoc.h"
#include "paintView.h"
#include ".\paintview.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CpaintView
IMPLEMENT_DYNCREATE(CpaintView, CView)
BEGIN_MESSAGE_MAP(CpaintView, CView)
// 标准打印命令
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONDBLCLK()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_COMMAND(ID_DOT, OnDot)
ON_COMMAND(ID_LINE, OnLine)
ON_COMMAND(ID_RECT, OnRect)
ON_COMMAND(ID_ELLIPSE, OnEllipse)
ON_COMMAND(ID_Red, OnRed)
ON_COMMAND(ID_Green, OnGreen)
ON_COMMAND(ID_Blue, OnBlue)
END_MESSAGE_MAP()
// CpaintView 构造/析构
CpaintView::CpaintView()
{
// TODO: 在此处添加构造代码
down=false;
flag = 0;
color = 0;
}
CpaintView::~CpaintView()
{
}
BOOL CpaintView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或
// 样式
return CView::PreCreateWindow(cs);
}
// CpaintView 绘制
void CpaintView::OnDraw(CDC* /*pDC*/)
{
CpaintDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
}
// CpaintView 打印
BOOL CpaintView::OnPreparePrinting(CPrintInfo* pInfo)
{
// 默认准备
return DoPreparePrinting(pInfo);
}
void CpaintView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 打印前添加额外的初始化
}
void CpaintView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 打印后添加清除过程
}
// CpaintView 诊断
#ifdef _DEBUG
void CpaintView::AssertValid() const
{
CView::AssertValid();
}
void CpaintView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CpaintDoc* CpaintView::GetDocument() const // 非调试版本是内联的
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CpaintDoc)));
return (CpaintDoc*)m_pDocument;
}
#endif //_DEBUG
// CpaintView 消息处理程序
void CpaintView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(down)
{
CClientDC dc(this);
if(flag==0)
{
CPen *pOld;
if(color == 1)
{
CBrush cb;
cb.CreateSolidBrush(RGB(255,0,0));
dc.SelectObject (&cb);
CPen p(PS_SOLID,1,RGB(255,0,0));
pOld=dc.SelectObject (&p);
dc.Ellipse (point.x,point.y,point.x + 3,point.y + 3);
}
else if(color == 2)
{
CBrush cb;
cb.CreateSolidBrush(RGB(0,255,0));
dc.SelectObject (&cb);
CPen p(PS_SOLID,1,RGB(0,255,0));
pOld=dc.SelectObject (&p);
dc.Ellipse (point.x,point.y,point.x + 3,point.y + 3);
}
else if(color == 3)
{
CBrush cb;
cb.CreateSolidBrush(RGB(0,0,255));
dc.SelectObject (&cb);
CPen p(PS_SOLID,1,RGB(0,0,255));
pOld=dc.SelectObject (&p);
dc.Ellipse (point.x,point.y,point.x + 3,point.y + 3);
}
else
{
CBrush cb;
cb.CreateSolidBrush(RGB(255,255,255));
dc.SelectObject (&cb);
CPen p(PS_SOLID,1,RGB(255,255,255));
pOld=dc.SelectObject (&p);
dc.Ellipse (point.x,point.y,point.x + 3,point.y + 3);
}
dc.SelectObject (pOld);
}
CView::OnMouseMove(nFlags, point);
}
}
void CpaintView::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CView::OnLButtonDblClk(nFlags, point);
}
void CpaintView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
down = true;
sPoint = point;
SetCapture();
CView::OnLButtonDown(nFlags, point);
}
void CpaintView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
down = false;
CClientDC dc(this);
ReleaseCapture();
ePoint=point;
CPen *pOld;
if(color == 1)
{
CPen p(PS_SOLID,1,RGB(255,0,0));
pOld=dc.SelectObject (&p);
if(flag==1)
{
dc.MoveTo(sPoint);
dc.LineTo(point);
}
else if(flag==2)
{
dc.Rectangle (sPoint.x,sPoint.y,point.x,point.y);
}
else if(flag == 3)
{
dc.Ellipse (sPoint.x,sPoint.y,point.x,point.y);
}
}
else if(color == 2)
{
CPen p(PS_SOLID,1,RGB(0,255,0));
pOld=dc.SelectObject (&p);
if(flag==1)
{
dc.MoveTo(sPoint);
dc.LineTo(point);
}
else if(flag==2)
{
dc.Rectangle (sPoint.x,sPoint.y,point.x,point.y);
}
else if(flag == 3)
{
dc.Ellipse (sPoint.x,sPoint.y,point.x,point.y);
}
}
else if(color == 3)
{
CPen p(PS_SOLID,1,RGB(0,0,255));
pOld=dc.SelectObject (&p);
if(flag==1)
{
dc.MoveTo(sPoint);
dc.LineTo(point);
}
else if(flag==2)
{
dc.Rectangle (sPoint.x,sPoint.y,point.x,point.y);
}
else if(flag == 3)
{
dc.Ellipse (sPoint.x,sPoint.y,point.x,point.y);
}
}
else
{
CPen p(PS_SOLID,1,RGB(255,255,255));
pOld=dc.SelectObject (&p);
if(flag==1)
{
dc.MoveTo(sPoint);
dc.LineTo(point);
}
else if(flag==2)
{
dc.Rectangle (sPoint.x,sPoint.y,point.x,point.y);
}
else if(flag == 3)
{
dc.Ellipse (sPoint.x,sPoint.y,point.x,point.y);
}
}
dc.SelectObject (pOld);
CView::OnLButtonUp(nFlags, point);
}
void CpaintView::OnDot()
{
// TODO: 在此添加命令处理程序代码
flag=0;
}
void CpaintView::OnLine()
{
// TODO: 在此添加命令处理程序代码
flag =1;
}
void CpaintView::OnRect()
{
// TODO: 在此添加命令处理程序代码
flag = 2;
}
void CpaintView::OnEllipse()
{
// TODO: 在此添加命令处理程序代码
flag = 3;
}
void CpaintView::OnRed()
{
// TODO: 在此添加命令处理程序代码
color = 1;
}
void CpaintView::OnGreen()
{
// TODO: 在此添加命令处理程序代码
color = 2;
}
void CpaintView::OnBlue()
{
// TODO: 在此添加命令处理程序代码
color = 3;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?