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

📄 testline.cpp

📁 采用VC6.0做的一个画图板程序
💻 CPP
字号:
// TestLine.cpp : implementation file
//

#include "stdafx.h"
#include "draw.h"
#include "TestLine.h"

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

/////////////////////////////////////////////////////////////////////////////
// CTestLine dialog


CTestLine::CTestLine(CWnd* pParent /*=NULL*/)
	: CDialog(CTestLine::IDD, pParent)
{
	//{{AFX_DATA_INIT(CTestLine)
	m_startpoint_y = 0;
	m_endpoint_x = 0;
	m_endpoint_y = 0;
	m_bujin = _T("");
	m_jiaodu = _T("");
	m_startpoint_x = 0;
	
	//}}AFX_DATA_INIT
	/*
	m_lib[2][2][1]="00";
	m_lib[2][2][2]="10";

	m_lib[3][3][1]="000";
	m_lib[3][3][2]="011";
	m_lib[3][3][3]="111";

	m_lib[4][4][1]="0000";
	m_lib[4][4][2]="0011";
	m_lib[4][4][3]="0100";
	m_lib[4][4][4]="0111";*/
}
void CTestLine::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CTestLine)
	DDX_Control(pDX, IDC_COMBO2, m_F);
	DDX_Control(pDX, IDC_COMBO1, m_N);
	DDX_Text(pDX, IDC_EDIT3, m_startpoint_y);
	DDX_Text(pDX, IDC_EDIT4, m_endpoint_x);
	DDX_Text(pDX, IDC_EDIT5, m_endpoint_y);
	DDX_CBString(pDX, IDC_COMBO1, m_bujin);
	DDX_CBString(pDX, IDC_COMBO2, m_jiaodu);
	DDX_Text(pDX, IDC_EDIT2, m_startpoint_x);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CTestLine, CDialog)
	//{{AFX_MSG_MAP(CTestLine)
	ON_WM_PAINT()
	ON_WM_CANCELMODE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTestLine message handlers

void CTestLine::OnOK() 
{
	this->UpdateData(true);
	if(m_startpoint_x==m_endpoint_x) return;
	CPaintDC dc(this);
	float k;
	int Xa,Ya,Xb,Yb;
	float x,y;
	int me;
	int a,b,c;
	float t;
	//此为DDA算法实现
	Xa=30+m_startpoint_x;
	Ya=40+m_startpoint_y;
	Xb=30+m_endpoint_x;
	Yb=40+m_endpoint_y;
	
	k=(float)(Yb-Ya)/(float)(Xb-Xa);
	x=(float)Xa;
	y=(float)Ya;

	long t11=GetTickCount();
	for(int i=0;i<200;i++)
	{
	if(abs(k)<1)
	{
		for(x=Xa;x<=Xb;x++)
		{
			dc.SetPixel(x,int(y+0.5),RGB(255,0,0));
			y+=k;
		}	
	}
	if(abs(k)>=1)
	{
		for(y=Ya;y<=Yb;y++)
		{
			dc.SetPixel(int(x+0.5),y,RGB(255,0,0));
			x+=1/k;
		}
	}
	}
	long t12=GetTickCount();
	
	//此为加参数后算法实现 这里只测步进为4,角度划分为4。
	Xa=420+m_startpoint_x;
	Ya=40+m_startpoint_y;
	Xb=420+m_endpoint_x;
	Yb=40+m_endpoint_y;
	
	k=(float)(Yb-Ya)/(float)(Xb-Xa);
	t=k;
	if(k>=1)
		k=1/k;

	if(k>=0&&k<0.25)
	{
		a=0,b=0,c=0;
	}
	if(k>=0.25&&k<0.5)
	{
		a=0,b=1,c=2;
	}
	if(k>=0.5&&k<0.75)
	{
		a=1,b=2,c=2;
	}
	if(k>=0.75&&k<=1)
	{
		a=1,b=2,c=3;
	}
	x=(float)Xa;
	y=(float)Ya;
	float dd=k*4;
	long t21=GetTickCount();
	for(int j=0;j<200;j++)
	{	
	if(abs(t)<1)
	{
		for(x=Xa;x<=Xb;x+=4)
		{
			me=int(y+0.5);
			dc.SetPixel(x,me,RGB(255,0,0));
			dc.SetPixel(x+1,me+a,RGB(255,0,0));
			dc.SetPixel(x+2,me+b,RGB(255,0,0));
			dc.SetPixel(x+3,me+c,RGB(255,0,0));
			y+=dd;
		}	
	}
	if(abs(t)>=1)
	{
		for(y=Ya;y<=Yb;y+=4)
		{
			me=int(x+0.5);
			dc.SetPixel(me,y,RGB(255,0,0));
			dc.SetPixel(me+a,y+1,RGB(255,0,0));
			dc.SetPixel(me+b,y+2,RGB(255,0,0));
			dc.SetPixel(me+c,y+3,RGB(255,0,0));
			x+=dd;
		}
	}
	}
	long t22=GetTickCount();
	long dt1,dt2;
	dt1=t12-t11;
	dt2=t22-t21;
	CString str;
	str.Format("DDA算法时间为:%dms\n加参算法时间为:%dms",dt1/200,dt2/200);//
	MessageBox(str);
	RedrawWindow();	
}

void CTestLine::OnPaint() 
{
	m_N.SelectString(0,"4");
	m_N.RedrawWindow();
	m_F.SelectString(0,"4");
	m_F.RedrawWindow();
	// TODO: Add your message handler code here
	this->UpdateData(true);
	if(m_startpoint_x==m_endpoint_x) return;
	CPaintDC dc(this);
	float k;
	int Xa,Ya,Xb,Yb;
	float x,y;
	int me;
	int a,b,c;
	float t;
	//此为DDA算法实现
	Xa=30+m_startpoint_x;
	Ya=40+m_startpoint_y;
	Xb=30+m_endpoint_x;
	Yb=40+m_endpoint_y;
	
	k=(float)(Yb-Ya)/(float)(Xb-Xa);
	x=(float)Xa;
	y=(float)Ya;

	if(abs(k)<1)
	{
		for(x=Xa;x<=Xb;x++)
		{
			dc.SetPixel(x,int(y+0.5),RGB(255,0,0));
			y+=k;
		}	
	}
	if(abs(k)>=1)
	{
		for(y=Ya;y<=Yb;y++)
		{
			dc.SetPixel(int(x+0.5),y,RGB(255,0,0));
			x+=1/k;
		}
	}
	
	//此为加参数后算法实现 这里只测步进为4,角度划分为4。
	Xa=420+m_startpoint_x;
	Ya=40+m_startpoint_y;
	Xb=420+m_endpoint_x;
	Yb=40+m_endpoint_y;
	
	k=(float)(Yb-Ya)/(float)(Xb-Xa);
	t=k;
	if(k>=1)
		k=1/k;

	if(k>=0&&k<0.25)
	{
		a=0,b=0,c=0;
	}
	if(k>=0.25&&k<0.5)
	{
		a=0,b=1,c=2;
	}
	if(k>=0.5&&k<0.75)
	{
		a=1,b=2,c=2;
	}
	if(k>=0.75&&k<=1)
	{
		a=1,b=2,c=3;
	}
	x=(float)Xa;
	y=(float)Ya;	
	if(abs(t)<1)
	{
		for(x=Xa;x<=Xb;x+=4)
		{
			me=int(y+0.5);
			dc.SetPixel(x,me,RGB(255,0,0));
			dc.SetPixel(x+1,me+a,RGB(255,0,0));
			dc.SetPixel(x+2,me+b,RGB(255,0,0));
			dc.SetPixel(x+3,me+c,RGB(255,0,0));
			y+=k*4;
		}	
	}
	if(abs(t)>=1)
	{
		for(y=Ya;y<=Yb;y+=4)
		{
			me=int(x+0.5);
			dc.SetPixel(me,y,RGB(255,0,0));
			dc.SetPixel(me+a,y+1,RGB(255,0,0));
			dc.SetPixel(me+b,y+2,RGB(255,0,0));
			dc.SetPixel(me+c,y+3,RGB(255,0,0));
			x+=4*k;
		}
	}
	// Do not call CDialog::OnPaint() for painting messages
}

void CTestLine::OnCancelMode() 
{
	CDialog::OnCancelMode();
	CPaintDC dc(this);
	// TODO: Add your message handler code here
}

BOOL CTestLine::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) 
{
	// TODO: Add your specialized code here and/or call the base class
	
	return CDialog::Create(IDD, pParentWnd);
}

void CTestLine::CalcWindowRect(LPRECT lpClientRect, UINT nAdjustType) 
{
	// TODO: Add your specialized code here and/or call the base class
//	m_lib
	CDialog::CalcWindowRect(lpClientRect, nAdjustType);
}

⌨️ 快捷键说明

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