📄 liming02view.cpp
字号:
// liming02View.cpp : implementation of the CLiming02View class
//
#include "stdafx.h"
#include "liming02.h"
#include "liming02Doc.h"
#include "liming02View.h"
//添加相关的头文件
#include "SetColor.h"
#include "LIMING.H"
#include "MainFrm.h"
int way=-1;
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CLiming02View
IMPLEMENT_DYNCREATE(CLiming02View, CScrollView)
BEGIN_MESSAGE_MAP(CLiming02View, CScrollView)
//{{AFX_MSG_MAP(CLiming02View)
ON_COMMAND(IDM_SetColor, OnSetColor)
ON_COMMAND(IDM_MidLine, OnMidLine)
ON_COMMAND(IDM_MidEllipse, OnMidEllipse)
ON_COMMAND(IDM_MidCircle, OnMidCircle)
ON_COMMAND(IDM_Bresenham, OnBresenham)
ON_COMMAND(IDM_DDA, OnDda)
ON_COMMAND(IDM_Bresenhamcircle, OnBresenhamcircle)
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLiming02View construction/destruction
CLiming02View::CLiming02View()
{
// TODO: add construction code here
}
CLiming02View::~CLiming02View()
{
}
BOOL CLiming02View::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CScrollView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CLiming02View drawing
void CLiming02View::OnDraw(CDC* pDC)
{
CLiming02Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
void CLiming02View::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CSize sizeTotal;
// TODO: calculate the total size of this view
sizeTotal.cx = sizeTotal.cy = 100;
SetScrollSizes(MM_TEXT, sizeTotal);
}
/////////////////////////////////////////////////////////////////////////////
// CLiming02View printing
BOOL CLiming02View::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CLiming02View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CLiming02View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CLiming02View diagnostics
#ifdef _DEBUG
void CLiming02View::AssertValid() const
{
CScrollView::AssertValid();
}
void CLiming02View::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
CLiming02Doc* CLiming02View::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CLiming02Doc)));
return (CLiming02Doc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CLiming02View message handlers
//颜色对话框的传值变化
void CLiming02View::OnSetColor()
{
// TODO: Add your command handler code here
CSetColor dlg;
if(dlg.DoModal ()==IDOK)
{
R=dlg.m_R ;
G=dlg.m_G ;
B=dlg.m_B ;
}
}
void CLiming02View::OnMidLine()
{
// TODO: Add your command handler code here
way=1;
huatu();
}
void CLiming02View::OnMidEllipse()
{
// TODO: Add your command handler code here
way=5;
huatu();
}
void CLiming02View::OnMidCircle()
{
// TODO: Add your command handler code here
way=3;
huatu();
}
void CLiming02View::OnBresenham()
{
// TODO: Add your command handler code here
way=2;
huatu();
}
void CLiming02View::OnDda()
{
// TODO: Add your command handler code here
way=0;
huatu();
}
void CLiming02View::OnBresenhamcircle()
{
// TODO: Add your command handler code here
way=4;
huatu();
}
//绘制相关图形变化
void CLiming02View::huatu()
{
CPoint point;
CDC* pDC=GetDC();
int r=abs(point.x-m_PointOrigin.x);
int a=abs(point.x-m_PointOrigin.x)/2;
int b=abs(point.y-m_PointOrigin.y)/2;
CString str;
switch (way)
{
case 0:
{
LIMING liming;
liming.DDA(pDC,m_PointOrigin.x,m_PointOrigin.y,m_PointOld.x,m_PointOld.y,R,G,B);
str="DDA算法画直线";
pDC->TextOut(point.x,point.y,str);
break;
}
case 1:
{
LIMING liming;
liming.MID(pDC,m_PointOrigin.x,m_PointOrigin.y,m_PointOld.x,m_PointOld.y,R,G,B);
str="DDA算法画直线";
pDC->TextOut(point.x,point.y,str);
break;
}
case 2:
{
LIMING liming;
liming.Bresenham(pDC,m_PointOrigin.x,m_PointOrigin.y,m_PointOld.x,m_PointOld.y,R,G,B);
str="Bresenham算法画直线";
pDC->TextOut(point.x,point.y,str);
break;
}
case 3:
{
LIMING liming;
liming.MidCircle(pDC,m_PointOrigin.x,m_PointOrigin.y,r,R,G,B);
str="中点法画圆";
pDC->TextOut(point.x,point.y,str);
break;
}
case 4:
{
LIMING liming;
liming.BresenhamCircle(pDC,m_PointOrigin.x,m_PointOrigin.y,r,R,G,B);
str="Bresenham画圆";
pDC->TextOut(point.x,point.y,str);
}
case 5:
{
LIMING liming;
liming.Midellipse(pDC,a,b,m_PointOrigin.x,m_PointOrigin.y,R,G,B);
str="中点法画椭圆";
pDC->TextOut(point.x,point.y,str);
break;
}
}
}
//设置相关状态栏的变化
void CLiming02View::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CString str;
CMainFrame *pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd ;
CStatusBar *pStatus=&pFrame->m_wndStatusBar ;
if(pStatus)
{
str.Format("X=%d,Y=%d",point.x,point.y);
pStatus->SetPaneText(1,str);
CScrollView::OnMouseMove(nFlags, point);
}
}
void CLiming02View::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_PointOld.x=point.x;
m_PointOld.y=point.y;
m_PointOrigin.x=point.x;
m_PointOrigin.y=point.y;
m_Dragging=1;
CScrollView::OnLButtonDown(nFlags, point);
}
void CLiming02View::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(m_Dragging)
{
m_Dragging=0;
CDC *pDC=GetDC();
int r=abs(point.x-m_PointOrigin.x);
int a=abs(point.x-m_PointOrigin.x)/2;
int b=abs(point.y-m_PointOrigin.y)/2;
CString str;
huatu();
}
CScrollView::OnLButtonUp(nFlags, point);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -