📄 mdrowpenview.cpp
字号:
// mDrowPenView.cpp : implementation of the CMDrowPenView class
//
#include "stdafx.h"
#include "mDrowPen.h"
#include "iostream"
#include "mDrowPenDoc.h"
#include "mDrowPenView.h"
#include "stdio.h"
#include <stdlib.h>
#include "SetSize.h"
#include "sizeDlg.h"
#include "SetColorDlg.h"
#include "MainFrm.h"
#include <math.h>
#include "cmath"
//using namespace std;
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMDrowPenView
IMPLEMENT_DYNCREATE(CMDrowPenView, CView)
BEGIN_MESSAGE_MAP(CMDrowPenView, CView)
//{{AFX_MSG_MAP(CMDrowPenView)
ON_WM_LBUTTONDBLCLK()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
ON_COMMAND(ID_DRAW_LINE, OnDrawLine)
ON_COMMAND(ID_DROW_THREAD, OnDrowThread)
ON_COMMAND(ID_DROW_MLINE, OnDrowMline)
ON_COMMAND(ID_DROW_ARC, OnDrowArc)
ON_COMMAND(ID_DROW_CECLE, OnDrowCecle)
ON_COMMAND(ID_DORW_RECT, OnDorwRect)
ON_COMMAND(ID_DROW_ELLIPSE, OnDrowEllipse)
ON_COMMAND(ID_SIZE, OnSize)
ON_COMMAND(ID_COLOR, OnColor)
ON_UPDATE_COMMAND_UI(ID_LEFT,OnUpdateXY) //手动添加的消息映射
ON_UPDATE_COMMAND_UI(ID_RIGHT,OnUpdateXY) //手动
//}}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()
/////////////////////////////////////////////////////////////////////////////
// CMDrowPenView construction/destruction
CMDrowPenView::CMDrowPenView()
{
// TODO: add construction code here
m_nFlag = 1;
m_bFlag = false;
}
CMDrowPenView::~CMDrowPenView()
{
}
BOOL CMDrowPenView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CMDrowPenView drawing
void CMDrowPenView::OnDraw(CDC* pDC)
{
CMDrowPenDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
pDC = GetDC();
CBrush *pbrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); //用刷子防止画的封闭图形是实心的,
pDC->SelectObject(pbrush); // 因为画图模式SetROP2(R2_NOT)
CBrush * pOldBrush = (CBrush *)pDC->SelectStockObject(NULL_BRUSH);
//重绘直线
CPen mypen;
for (p = head; p->next != NULL; p = p->next)
{
CPen pen;
pen.CreatePen(PS_COSMETIC, p->nPenSize, RGB(p->nmyRed, p->nmyGreen, p->nmyBlue));
pDC->SelectObject(&pen);
pDC->SetROP2(R2_COPYPEN);
pDC->MoveTo(p->Startpoint);
pDC->LineTo(p->EndPoint);
DeleteObject(&pen);
}
mypen.CreatePen(PS_COSMETIC, p->nPenSize, RGB(p->nmyRed, p->nmyGreen, p->nmyBlue));
pDC->SelectObject(&mypen);
pDC->SetROP2(R2_COPYPEN);
pDC->MoveTo(p->Startpoint);
pDC->LineTo(p->EndPoint);
DeleteObject(&mypen);
//重绘折线
CPen zmypen;
for (zp = zhead; zp->next != NULL; zp = zp->next)
{
CPen pen;
pen.CreatePen(PS_COSMETIC, zp->nPenSize, RGB(zp->nmyRed, zp->nmyGreen, zp->nmyBlue));
pDC->SelectObject(&pen);
pDC->SetROP2(R2_COPYPEN);
pDC->MoveTo(zp->Startpoint);
pDC->LineTo(zp->EndPoint);
DeleteObject(&pen);
}
zmypen.CreatePen(PS_COSMETIC, zp->nPenSize, RGB(zp->nmyRed, zp->nmyGreen, zp->nmyBlue));
pDC->SelectObject(&zmypen);
pDC->SetROP2(R2_COPYPEN);
pDC->MoveTo(zp->Startpoint);
pDC->LineTo(zp->EndPoint);
DeleteObject(&zmypen);
//重绘圆形
CPen cpen;
long NewLenth;
for (cp = chead; cp->next != NULL; cp = cp->next)
{
CPen pen;
pen.CreatePen(PS_COSMETIC, cp->nPenSize, RGB(cp->nmyRed, cp->nmyGreen, cp->nmyBlue));
pDC->SelectObject(&pen);
pDC->SetROP2(R2_COPYPEN);
NewLenth = sqrtf((cp->EndPoint.x-cp->Startpoint.x)*(cp->EndPoint.x-cp->Startpoint.x)+
(cp->EndPoint.y-cp->Startpoint.y)*(cp->EndPoint.y-cp->Startpoint.y));
pDC->Ellipse(cp->Startpoint.x+NewLenth,cp->Startpoint.y-NewLenth,cp->Startpoint.x-NewLenth,
cp->Startpoint.y+NewLenth);
DeleteObject(&pen);
}
cpen.CreatePen(PS_COSMETIC, cp->nPenSize, RGB(cp->nmyRed, cp->nmyGreen, cp->nmyBlue));
pDC->SelectObject(&cpen);
pDC->SetROP2(R2_COPYPEN);
NewLenth = sqrtf((cp->EndPoint.x-cp->Startpoint.x)*(cp->EndPoint.x-cp->Startpoint.x)+
(cp->EndPoint.y-cp->Startpoint.y)*(cp->EndPoint.y-cp->Startpoint.y));
pDC->Ellipse(cp->Startpoint.x+NewLenth,cp->Startpoint.y-NewLenth,cp->Startpoint.x-NewLenth,
cp->Startpoint.y+NewLenth);
DeleteObject(&cpen);
//重绘矩形
CPen rpen;
for (rp = rhead; rp->next != NULL; rp = rp->next)
{
CPen pen;
pen.CreatePen(PS_COSMETIC, rp->nPenSize, RGB(rp->nmyRed, rp->nmyGreen, rp->nmyBlue));
pDC->SelectObject(&pen);
pDC->SetROP2(R2_COPYPEN);
pDC->Rectangle(CRect(rp->Startpoint,rp->EndPoint));
DeleteObject(&pen);
}
rpen.CreatePen(PS_COSMETIC, rp->nPenSize, RGB(rp->nmyRed, rp->nmyGreen, rp->nmyBlue));
pDC->SelectObject(&rpen);
pDC->SetROP2(R2_COPYPEN);
pDC->Rectangle(CRect(rp->Startpoint,rp->EndPoint));
DeleteObject(&rpen);
// 重绘椭圆
CPen epen;
for (ep = ehead; ep->next != NULL; ep = ep->next)
{
CPen pen;
pen.CreatePen(PS_COSMETIC, ep->nPenSize, RGB(ep->nmyRed, ep->nmyGreen, ep->nmyBlue));
pDC->SelectObject(&pen);
pDC->SetROP2(R2_COPYPEN);
pDC->Ellipse(CRect(ep->Startpoint,ep->EndPoint));
DeleteObject(&pen);
}
epen.CreatePen(PS_COSMETIC, ep->nPenSize, RGB(ep->nmyRed, ep->nmyGreen, ep->nmyBlue));
pDC->SelectObject(&epen);
pDC->SetROP2(R2_COPYPEN);
pDC->Ellipse(CRect(ep->Startpoint,ep->EndPoint));
DeleteObject(&epen);
ReleaseDC(pDC);
}
/////////////////////////////////////////////////////////////////////////////
// CMDrowPenView printing
BOOL CMDrowPenView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CMDrowPenView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CMDrowPenView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CMDrowPenView diagnostics
#ifdef _DEBUG
void CMDrowPenView::AssertValid() const
{
CView::AssertValid();
}
void CMDrowPenView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CMDrowPenDoc* CMDrowPenView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMDrowPenDoc)));
return (CMDrowPenDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMDrowPenView message handlers
void CMDrowPenView::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CView::OnLButtonDblClk(nFlags, point);
}
void CMDrowPenView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_bFlag = true;
m_pStartPoint = point;
m_oldPoint = point;
if (m_nFlag == 3) //设置画折线的中间起始点
{
if (nCount ==0)
{
m_pzStarpoint = point;
mOldPoint = point;
nCount++;
}
}
else
nCount = 0;
CView::OnLButtonDown(nFlags, point);
}
void CMDrowPenView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CDC *pDC = GetDC();
CPen mypen;
CPen *mOldPen ;
CPoint EndPoint;
m_pEndPoint = point;
mypen.CreatePen(PS_COSMETIC, m_nPenSize, RGB(nRed,nGreen,nBlue));
mOldPen = &mypen;
pDC->SelectObject(mOldPen);
CBrush *pbrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); //用刷子防止画的封闭图形是实心的,
pDC->SelectObject(pbrush); // 因为画图模式SetROP2(R2_NOT)
CBrush * pOldBrush = (CBrush *)pDC->SelectStockObject(NULL_BRUSH);
switch (m_nFlag) //m_nFlag是图形的区分标志
{
case 1:
pDC->SetROP2(R2_COPYPEN);
m_pEndPoint = point;
pDC->MoveTo(m_pStartPoint);
pDC->LineTo(m_pEndPoint);
ReleaseDC(pDC);
break;
case 2:
m_pEndPoint = point;
pDC->MoveTo(m_pStartPoint);
pDC->LineTo(m_pEndPoint);
m_pStartPoint = m_pEndPoint;
ReleaseDC(pDC);
break;
case 3:
pDC->SetROP2(R2_COPYPEN);
m_pzEndpoint = point;
pDC->MoveTo(m_pzStarpoint);
pDC->LineTo(m_pzEndpoint);
break;
case 4:
pDC->SetROP2(R2_COPYPEN);
m_pEndPoint = point;
EndPoint.x = m_pEndPoint.x;
EndPoint.y = m_pStartPoint.y;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -