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

📄 kkview.cpp

📁 naioijwefoj weojf王婆欧文而非奇偶wjopwefo
💻 CPP
字号:
// kkView.cpp : implementation of the CKkView class
//

#include "stdafx.h"
#include "kk.h"
#include <math.h>

#include "kkDoc.h"
#include "kkView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CKkView

IMPLEMENT_DYNCREATE(CKkView, CView)

BEGIN_MESSAGE_MAP(CKkView, CView)
	//{{AFX_MSG_MAP(CKkView)
	ON_COMMAND(ID_LINE_Bresenham, OnLINEBresenham)
	ON_WM_LBUTTONDOWN()
	ON_WM_MOUSEMOVE()
	ON_WM_LBUTTONUP()
	//}}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()

/////////////////////////////////////////////////////////////////////////////
// CKkView construction/destruction

CKkView::CKkView()
{
	// TODO: add construction code here

}

CKkView::~CKkView()
{
}

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

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CKkView drawing

void CKkView::OnDraw(CDC* pDC)
{
	CKkDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
}

/////////////////////////////////////////////////////////////////////////////
// CKkView printing

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

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

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

/////////////////////////////////////////////////////////////////////////////
// CKkView diagnostics

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

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

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

/////////////////////////////////////////////////////////////////////////////
// CKkView message handlers

void CKkView::Bresenham_Line(int x0, int y0, int x1, int y1, int color)
{
   CDC *pDC = this->GetDC();
   pDC->SetROP2(R2_NOT);
   int dx,dy,e,i,x,y;
   dx=x1-x0;
   dy=y1-y0;
   x=x0,y=y0;
   if(fabs(dx)>fabs(dy))
	   //if(dx>dy)
   {
   //{
 if(dx>0 && dy>0)     //一象限
 {
	 	e=2*dy-dx;
   for(i=0;i<=dx;i++)
   { 
	   pDC->SetPixel(x,y,color);
	   
       x++;
	   if(e>=0)
	   {
		   y++;
		   e=e+2*dy-2*dx;
	   }else
		   e=e+2*dy;
   }
 }
    
	if(dx<0 && dy>0)   //二象限
	{	
		e=2*dy+dx;
	for(i=0;i<=dx;i++)
   { 
	   pDC->SetPixel(x,y,color);

       x--;
	   if(e>=0)
	   {
		   y++;
		   e=e+2*dy+2*dx;
	   }else
		   e=e+2*dy;
	}
	}	
    
   if(dx<0 && dy<0)        //三象限
	  {
	 
	   e=-2*dy+dx;     
    for(i=0;i<=-dx;i++)
   { 
	   pDC->SetPixel(x,y,color);
	   
       x--;
	   if(e>=0)
	   {
		   y--;
		   e=e-2*dy+2*dx;
	   }else
		   e=e-2*dy;
   }
   }
  
   if(dx>0 && dy<0)        //四象限
   {
	   e=-2*dy-dx;     
   for(i=0;i<=dx;i++)
   { 
	   pDC->SetPixel(x,y,color);
	 
       x++;
	   if(e>=0)
	   {
		   y--;
		   e=e-2*dy-2*dx;
	   }else
		   e=e-2*dy;
   }
   }
   }
   if(fabs(dx)<fabs(dy))
   {
	   if(dx>0 && dy>0)            //一象限
	{
		e=2*dx-dy;
   for(i=0;i<=dy;i++)
   { 
	   pDC->SetPixel(x,y,color);
	   
       y++;
	   if(e>=0)
	   {
		   x++;
		   e=e+2*dx-2*dy;
	   }else
		   e=e+2*dx;
   }
	}
   
   if(dx<0 && dy>0)      //二象限
	{	e=-2*dx-dy;
	for(i=0;i<=dy;i++)
   { 
	   pDC->SetPixel(x,y,color);
	
       y++;
	   if(e>=0)
	   {
		   x--;
		   e=e-2*dx-2*dy;
	   }else
		   e=e-2*dx;
	}
	}
    if(dx<0 && dy<0)         //三象限
   {
	   e=-2*dx+dy;
   for(i=0;i<=dy;i++)
   { 
	   pDC->SetPixel(x,y,color);
	   
       y--;
	   if(e>=0)
	   {
		   x--;
		   e=e-2*dx+2*dy;
	   }else
		   e=e-2*dx;
   }
   }
	if(dx>0 && dy<0)        //四象限
   {
	   e=2*dx+dy;
    for(i=0;i<=dy;i++)
   { 
	   pDC->SetPixel(x,y,color);
	  
       y--;
	   if(e>=0)
	   {
		   x++;
		   e=e+2*dx+2*dy;
	   }else
		   e=e+2*dx;
    }
	}
   }
}

void CKkView::OnLINEBresenham() 
{
	// TODO: Add your command handler code here
	Bresenham_Line(100,10,150,120,RGB(0,0,255));
}

void CKkView::DrawLine(CPoint P1, CPoint P2)
{
    CDC *pDC = this->GetDC();
	if(m_bLeftButtonDown)
	pDC->SetROP2(R2_NOT);	//设置绘图模式为异或模式
	//pDC->MoveTo(P1);
	//pDC->LineTo(P2);
	Bresenham_Line(P1.x,P1.y,P2.x,P2.y,RGB(0,0,255));
	this->ReleaseDC(pDC);

}

void CKkView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	m_bLeftButtonDown = TRUE;
	StartPt = point;
	EndPt = point;
	CView::OnLButtonDown(nFlags, point);
}

void CKkView::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
   if(m_bLeftButtonDown)
	{	Bresenham_Line(StartPt.x,StartPt.y,EndPt.x,EndPt.y,RGB(0,0,255));
	Bresenham_Line(StartPt.x,StartPt.y,point.x,point.y,RGB(0,0,255));
 		//DrawLine(StartPt,EndPt);
		//DrawLine(StartPt, point);
		EndPt = point;
	}
	CView::OnMouseMove(nFlags, point);
}

void CKkView::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	m_bLeftButtonDown = FALSE;
	EndPt = point;
	GetDC()->SetROP2(R2_COPYPEN);
	Bresenham_Line(StartPt.x,StartPt.y,EndPt.x,EndPt.y,RGB(0,0,255));
	//DrawLine(StartPt, EndPt);
	CView::OnLButtonUp(nFlags, point);
}

⌨️ 快捷键说明

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