// MiniDrawView.cpp : implementation of the CMiniDrawView class
//
#include "stdafx.h"
#include "MiniDraw.h"
#include "MiniDrawDoc.h"
#include "MiniDrawView.h"
#define SAFEDELETE(p) {if(p){delete p; p=NULL;}}
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMiniDrawView
IMPLEMENT_DYNCREATE(CMiniDrawView, CView)
BEGIN_MESSAGE_MAP(CMiniDrawView, CView)
//{{AFX_MSG_MAP(CMiniDrawView)
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONUP()
ON_COMMAND(ID_BUTTONLINE, OnButtonline)
ON_COMMAND(ID_BUTTONELLIPSE, OnButtonellipse)
ON_COMMAND(ID_BUTTONRECTANGLE, OnButtonrectangle)
ON_COMMAND(ID_BUTTONSECTOR, OnButtonsector)
ON_COMMAND(ID_BUTTONFREE, OnButtonfree)
//}}AFX_MSG_MAP
// Standard printing commands
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()
/////////////////////////////////////////////////////////////////////////////
// CMiniDrawView construction/destruction
CMiniDrawView::CMiniDrawView()
{
// TODO: add construction code here
m_Dragging = 0;
m_CurrentTool = ID_BUTTONLINE;
}
CMiniDrawView::~CMiniDrawView()
{
for( int i=0; i<m_FigArray.size(); i++)
{
SAFEDELETE ( m_FigArray.at(i) );
}
}
BOOL CMiniDrawView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CMiniDrawView drawing
void CMiniDrawView::OnDraw(CDC* pDC)
{
CMiniDrawDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
for( int i=0; i<m_FigArray.size(); i++)
{
m_FigArray.at(i)->Draw(pDC);
}
}
/////////////////////////////////////////////////////////////////////////////
// CMiniDrawView printing
BOOL CMiniDrawView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CMiniDrawView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CMiniDrawView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CMiniDrawView diagnostics
#ifdef _DEBUG
void CMiniDrawView::AssertValid() const
{
CView::AssertValid();
}
void CMiniDrawView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CMiniDrawDoc* CMiniDrawView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMiniDrawDoc)));
return (CMiniDrawDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMiniDrawView message handlers
void CMiniDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_PointOrigin = point;
m_PointOld = point;
m_Dragging = 1;
CView::OnLButtonDown(nFlags, point);
}
void CMiniDrawView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if( !m_Dragging )
{
return;
}
CClientDC ClientDC( this );
ClientDC.SelectStockObject (NULL_BRUSH);
switch (m_CurrentTool)
{
case ID_BUTTONLINE:
ClientDC.SetROP2( R2_NOT );
ClientDC.MoveTo( m_PointOrigin );
ClientDC.LineTo( m_PointOld );
ClientDC.MoveTo( m_PointOrigin );
ClientDC.LineTo( point );
break;
case ID_BUTTONELLIPSE:
ClientDC.SetROP2 (R2_NOT);
ClientDC.Ellipse (m_PointOrigin.x, m_PointOrigin.y, m_PointOld.x, m_PointOld.y );
ClientDC.Ellipse (m_PointOrigin.x, m_PointOrigin.y, point.x, point.y );
break;
case ID_BUTTONRECTANGLE:
ClientDC.SetROP2 (R2_NOT);
ClientDC.Rectangle (m_PointOrigin.x, m_PointOrigin.y, m_PointOld.x, m_PointOld.y );
ClientDC.Rectangle (m_PointOrigin.x, m_PointOrigin.y, point.x, point.y );
break;
case ID_BUTTONSECTOR:
ClientDC.SetROP2( R2_NOT );
ClientDC.MoveTo( m_PointOrigin );
ClientDC.LineTo( point );
case ID_BUTTONFREE:
ClientDC.SetROP2( R2_NOT );
ClientDC.MoveTo( m_PointOld );
ClientDC.LineTo( point );
break;
}
m_PointOld = point;
CView::OnMouseMove(nFlags, point);
}
void CMiniDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if( !m_Dragging )
{
return ;
}
CClientDC ClientDC( this );
ClientDC.SelectStockObject (NULL_BRUSH);
CFigure *pFigure = NULL;
switch (m_CurrentTool)
{
case ID_BUTTONLINE:
ClientDC.SetROP2( R2_NOT );
ClientDC.MoveTo( m_PointOrigin );
ClientDC.LineTo( m_PointOld );
pFigure = new CLine(m_PointOrigin.x, m_PointOrigin.y,
point.x, point.y );
break;
case ID_BUTTONELLIPSE:
ClientDC.SetROP2 (R2_NOT);
ClientDC.Ellipse (m_PointOrigin.x, m_PointOrigin.y, m_PointOld.x, m_PointOld.y );
pFigure = new CEllipse (m_PointOrigin.x, m_PointOrigin.y, point.x, point.y);
break;
case ID_BUTTONRECTANGLE:
ClientDC.SetROP2 (R2_NOT);
ClientDC.Rectangle (m_PointOrigin.x, m_PointOrigin.y, m_PointOld.x, m_PointOld.y );
pFigure = new CRectangle (m_PointOrigin.x, m_PointOrigin.y, point.x, point.y);
break;
case ID_BUTTONSECTOR:
ClientDC.SetROP2( R2_NOT );
ClientDC.MoveTo( m_PointOrigin );
ClientDC.LineTo( point );
m_PointOld = point;
pFigure = new CLine(m_PointOrigin.x, m_PointOrigin.y,
point.x, point.y );
case ID_BUTTONFREE:
ClientDC.SetROP2( R2_NOT );
ClientDC.MoveTo( m_PointOld );
ClientDC.LineTo( point );
pFigure = new CLine(m_PointOrigin.x, m_PointOrigin.y,
point.x, point.y );
}
ClientDC.SetROP2 (R2_COPYPEN);
pFigure->Draw (&ClientDC);
m_FigArray.push_back( pFigure );
m_Dragging = 0;
CView::OnLButtonUp(nFlags, point);
}
void CMiniDrawView::OnButtonline()
{
// TODO: Add your command handler code here
m_CurrentTool = ID_BUTTONLINE;
}
void CMiniDrawView::OnButtonellipse()
{
// TODO: Add your command handler code here
m_CurrentTool = ID_BUTTONELLIPSE;
}
void CMiniDrawView::OnButtonrectangle()
{
// TODO: Add your command handler code here
m_CurrentTool = ID_BUTTONRECTANGLE;
}
void CMiniDrawView::OnButtonsector()
{
// TODO: Add your command handler code here
m_CurrentTool = ID_BUTTONSECTOR;
}
void CMiniDrawView::OnButtonfree()
{
// TODO: Add your command handler code here
m_CurrentTool = ID_BUTTONFREE;
}
MiniDraw.zip_minidraw_封闭曲线
版权申诉
132 浏览量
2022-09-24
04:35:35
上传
评论
收藏 18KB ZIP 举报
邓凌佳
- 粉丝: 65
- 资源: 1万+
最新资源
- hdmi in视频采集,输出到hdmi out, 支持HDMI指令控制,支持TFTP远程下载图片
- 批量word文件内容替换工具1.0 (批量实现多个 Word 文档文件文字替换利器).exe
- Cartoon GUI Pack 1.2.zip
- 【数据集和代码】基于加速度传感器的步态识别行人分类实验(可做步态识别)
- 我分享个魔兽内存修改器
- Python毕业设计基于Django的网易云数据分析可视化大屏系统的设计与实现+使用说明+全部资料(优秀项目).zip
- mp3 idv2,idv1,frame分析工具
- 鹈鹕优化算法POA MATLAB源码, 应用案例为函数极值求解以及优化svm进行分类,代码注释详细,可结合自身需求进行应用
- Python毕业设计基于Django的网易云数据分析可视化大屏系统的设计与实现+使用说明+全部资料(高分项目).zip
- 蛇优化算法SO MATLAB源码, 应用案例为函数极值求解以及优化svm进行分类,代码注释详细,可结合自身需求进行应用
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈