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

📄 llview.cpp

📁 windows核心编程,详细讲述WINDOWS编程原理
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// llView.cpp : implementation of the CLlView class
//

#include "stdafx.h"
#include "ll.h"

#include "llDoc.h"
#include "llView.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CLlView

IMPLEMENT_DYNCREATE(CLlView, CView)

BEGIN_MESSAGE_MAP(CLlView, CView)
	//{{AFX_MSG_MAP(CLlView)
	ON_COMMAND(IDM_LINE, OnLine)
	ON_WM_LBUTTONUP()
	ON_WM_MOUSEMOVE()
	ON_WM_LBUTTONDOWN()
	ON_COMMAND(ID_ELLIPSE, OnEllipse)
	ON_COMMAND(ID_RECTANGLE, OnRectangle)
	ON_COMMAND(ID_SQUARE, OnSquare)
	ON_COMMAND(ID_CIRCLE, OnCircle)
	ON_COMMAND(ID_RANDOM, OnRandom)
	ON_COMMAND(ID_DASH, OnDash)
	ON_COMMAND(ID_DASHDOT, OnDashdot)
	ON_COMMAND(ID_SOLID, OnSolid)
	ON_COMMAND(ID_PENWIDTH1, OnPenwidth1)
	ON_COMMAND(ID_PENWIDTH2, OnPenwidth2)
	ON_COMMAND(ID_PENWIDTH3, OnPenwidth3)
	ON_COMMAND(ID_PENWIDTH4, OnPenwidth4)
	ON_COMMAND(ID_BRUSHCOLOR, OnBrushcolor)
	ON_COMMAND(ID_PENCOLOR, OnPencolor)
	ON_UPDATE_COMMAND_UI(ID_DASH, OnUpdateDash)
	ON_UPDATE_COMMAND_UI(ID_DASHDOT, OnUpdateDashdot)
	ON_UPDATE_COMMAND_UI(ID_SOLID, OnUpdateSolid)
	ON_UPDATE_COMMAND_UI(ID_PENWIDTH1, OnUpdatePenwidth1)
	ON_UPDATE_COMMAND_UI(ID_PENWIDTH2, OnUpdatePenwidth2)
	ON_UPDATE_COMMAND_UI(ID_PENWIDTH3, OnUpdatePenwidth3)
	ON_UPDATE_COMMAND_UI(ID_PENWIDTH4, OnUpdatePenwidth4)
	ON_COMMAND(ID_ERASER, OnEraser)
	ON_COMMAND(ID_BRUSH4, OnBrush4)
	ON_COMMAND(ID_BRUSH1, OnBrush1)
	ON_COMMAND(ID_BRUSH2, OnBrush2)
	ON_COMMAND(ID_BRUSH3, OnBrush3)
	ON_COMMAND(ID_BRUSH5, OnBrush5)
	ON_COMMAND(ID_BRUSH6, OnBrush6)
	ON_COMMAND(ID_BRUSH7, OnBrush7)
	ON_UPDATE_COMMAND_UI(ID_BRUSH1, OnUpdateBrush1)
	ON_UPDATE_COMMAND_UI(ID_BRUSH2, OnUpdateBrush2)
	ON_UPDATE_COMMAND_UI(ID_BRUSH3, OnUpdateBrush3)
	ON_UPDATE_COMMAND_UI(ID_BRUSH4, OnUpdateBrush4)
	ON_UPDATE_COMMAND_UI(ID_BRUSH5, OnUpdateBrush5)
	ON_UPDATE_COMMAND_UI(ID_BRUSH6, OnUpdateBrush6)
	ON_UPDATE_COMMAND_UI(ID_BRUSH7, OnUpdateBrush7)
	ON_COMMAND(ID_MOVE, OnMove)
	ON_COMMAND(ID_DELETE, OnDelete)
	ON_COMMAND(ID_COLORPANE, OnColorpane)
	ON_COMMAND(ID_EDIT_REDO, OnEditRedo)
	ON_COMMAND(ID_EDIT_UNDO, OnEditUndo)
	//}}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()

/////////////////////////////////////////////////////////////////////////////
// CLlView construction/destruction

CLlView::CLlView()
{
	m_bStart=false;
	// TODO: add construction code here
	
	m_nLinetype=PS_SOLID;
	m_nBrushtype=6;
	m_nPenwidth=4;
	m_euDraw_Type=DRAW_LINE;
	m_Brushcolor=RGB(208,208,255);
	m_Pencolor=RGB(200,205,150);
	 //IsMove=false;
	// IsDelete=false;
	 m_IsSelect=false;
	 m_IsGet=false;
}

CLlView::~CLlView()
{CLlDoc* pDoc = GetDocument();
	POSITION pos=pDoc->m_listRecord.GetHeadPosition();
	while(pos)
	{
		CShape *shape=(CShape*)pDoc->m_listRecord.GetNext(pos);
	delete shape;
}
}

BOOL CLlView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CLlView drawing

void CLlView::OnDraw(CDC* pDC)
{
	CLlDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
	
	POSITION pos=pDoc->m_listDraw.GetHeadPosition();
	while(pos){
		CShape *shape=(CShape*)pDoc->m_listDraw.GetNext(pos);
	shape->Draw(pDC);
}
}
/////////////////////////////////////////////////////////////////////////////
// CLlView printing

BOOL CLlView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CLlView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CLlView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CLlView diagnostics

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

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

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

/////////////////////////////////////////////////////////////////////////////
// CLlView message handlers

void CLlView::OnLine() 
{
	// TODO: Add your command handler code here
	m_euDraw_Type=DRAW_LINE;
		
}

void CLlView::OnLButtonUp(UINT nFlags, CPoint point) 
{ 
	//CPen *pen;
	// TODO: Add your message handler code here and/or call default
	if(m_bStart)	
		
	{
		
		m_pShape->SetPoint(m_ptOrigin,point);
		m_pShape->SetPen(m_nLinetype,m_nPenwidth,m_Pencolor);
		m_pShape->SetBrush(m_Brushcolor);
		m_pShape->SetAttribute(m_nLinetype,m_nPenwidth,m_Pencolor,m_nBrushtype);
		CLlDoc *pDoc=GetDocument();
		pDoc->m_listRecord.AddTail(m_pShape);
		pDoc->m_listDraw.AddTail(m_pShape);
		Invalidate();
	}
	m_IsGet=false;
	m_IsSelect=false;
	m_bStart=false;	
		Invalidate();
	
	CView::OnLButtonUp(nFlags, point);

}

void CLlView::OnMouseMove(UINT nFlags, CPoint point) 
{
	
		CDC *pDC=this->GetDC();

	 int oldDrawMode=pDC->SetROP2(R2_NOTXORPEN);
	//CPen pen(m_nLinetype,m_nPenwidth,m_Pencolor);
	//CPen *pOldPen=pDC->SelectObject(&pen);
	//CBrush brush(m_Brushcolor);
	//CBrush *pOldBrush=pDC->SelectObject(&brush);
	// TODO: Add your message handler code here and/or call default
	if(m_bStart)
	{
	switch(m_euDraw_Type)
	{case DRAW_LINE:
	pDC->MoveTo(m_ptOrigin);
    pDC->LineTo(m_ptEnd);
	m_ptEnd=point;
    pDC->MoveTo(m_ptOrigin);
    pDC->LineTo(m_ptEnd);

	break;
	case DRAW_RANDOM:
	pDC->MoveTo(m_ptOrigin);
    pDC->LineTo(point);
	m_pShape->SetPoint(m_ptOrigin,point);
	m_ptOrigin=point;
	
	break;
	case DRAW_ERASER:
	pDC->MoveTo(m_ptOrigin);
    pDC->LineTo(point);
	m_pShape->SetPoint(m_ptOrigin,point);
	m_ptOrigin=point;
	
	break;
	case DRAW_RECTANGLE:
	pDC->Rectangle(m_ptOrigin.x,m_ptOrigin.y,m_ptEnd.x,m_ptEnd.y);
    m_ptEnd=point;
	pDC->Rectangle(m_ptOrigin.x,m_ptOrigin.y,m_ptEnd.x,m_ptEnd.y);
	break;
	case DRAW_SQUARE:
	pDC->Rectangle(m_ptOrigin.x,m_ptOrigin.y,m_ptEnd.x,m_ptOrigin.y+m_ptEnd.x-m_ptOrigin.x);
    m_ptEnd=point;
	pDC->Rectangle(m_ptOrigin.x,m_ptOrigin.y,m_ptEnd.x,m_ptOrigin.y+m_ptEnd.x-m_ptOrigin.x);
	break;
	case DRAW_ELLIPSE:
	pDC->Ellipse(m_ptOrigin.x,m_ptOrigin.y,m_ptEnd.x,m_ptEnd.y);
	m_ptEnd=point;
    pDC->Ellipse(m_ptOrigin.x,m_ptOrigin.y,m_ptEnd.x,m_ptEnd.y);
	break;
	case DRAW_CIRCLE:
	pDC->Ellipse(m_ptOrigin.x,m_ptOrigin.y,m_ptEnd.x,m_ptOrigin.y+m_ptEnd.x-m_ptOrigin.x);
    m_ptEnd=point;
	pDC->Ellipse(m_ptOrigin.x,m_ptOrigin.y,m_ptEnd.x,m_ptOrigin.y+m_ptEnd.x-m_ptOrigin.x);
	break;


	}
	}
	if(m_IsSelect)
{	
   CPoint pt1=point- m_ptTemp+m_pshapeSelect->GetOriginPoint();
    CPoint pt2=point- m_ptTemp+m_pshapeSelect->GetEndPoint(); 

    m_pshapeSelect->Draw(pDC);
    m_ptTemp=point;
	m_pshapeSelect->SetPoint(pt1,pt2);
    m_pshapeSelect->Draw(pDC);
 //   IsMove=false;
//	IsDelete=false;
   
}	
	
     pDC->SetROP2(oldDrawMode);
	 
	CView::OnMouseMove(nFlags, point);
}

void CLlView::OnLButtonDown(UINT nFlags, CPoint point) 
{
    CDC *pDC=this->GetDC();
	// TODO: Add your message handler code here and/or call default
	m_ptOrigin=point;
	m_ptEnd=point;
	m_bStart=true;
	switch (m_euDraw_Type)
	{
	case IsMove:
   m_IsSelect=IsInArea(point);
   	m_bStart=false;//只要选中就不画图
		if(m_IsSelect)
		{
		
			m_ptTemp=point;
		}
	break;
	case IsDelete:
		m_IsGet=IsInArea(point);

		//if(m_IsGet)
	//	{
			m_bStart=false;//只要选中就不画图
			//m_ptTemp=point;
		//}

	}
/*	if(IsMove)
	{
	m_IsSelect=IsInArea(point);
		if(m_IsSelect)
		{
			m_bStart=false;
			m_ptTemp=point;
		}

	}
		if(IsDelete)
	{
	m_IsGet=IsInArea(point);
		if(m_IsGet)
		{
			m_bStart=false;
			//m_ptTemp=point;
		}

	}*/
			if(m_IsGet)
{	
   //CPoint pt1=point- m_ptTemp+m_pshapeSelect->GetOriginPoint();
   // CPoint pt2=point- m_ptTemp+m_pshapeSelect->GetEndPoint(); 

   m_pshapeSelect->Draw(pDC);
   m_ptTemp=point;
   m_pshapeSelect->SetPoint(0,0);
   m_pshapeSelect->Draw(pDC);
   //IsMove=false;
  // IsDelete=false;
   
}	
	if(m_bStart)
	{
	switch (m_euDraw_Type)

⌨️ 快捷键说明

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