📄 kkview.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 + -