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

📄 shezhidlg.cpp

📁 简单的图形变换系统
💻 CPP
字号:
// ShezhiDlg.cpp : implementation file
//

#include "stdafx.h"
#include "PlayDraw.h"
#include "ShezhiDlg.h"

#include "PlayDrawView.h"
#include "Matrix.h"
#define PI 3.14159265

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

/////////////////////////////////////////////////////////////////////////////
// CShezhiDlg dialog


CShezhiDlg::CShezhiDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CShezhiDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CShezhiDlg)
	m_duichengX = 0.0f;
	m_duichengY = 0.0f;
	m_x1 = 0.0f;
	m_x2 = 0.0f;
	m_x3 = 0.0f;
	m_y1 = 0.0f;
	m_y2 = 0.0f;
	m_y3 = 0.0f;
	m_jiaodu = 0.0f;
	m_pingyiX = 0.0f;
	m_pingyiY = 0.0f;
	m_xuanzhuanX = 0.0f;
	m_xuanzhuanY = 0.0f;
	m_biliX = 0.0f;
	m_biliY = 0.0f;
	//}}AFX_DATA_INIT
}


void CShezhiDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CShezhiDlg)
	DDX_Text(pDX, IDC_duichengX, m_duichengX);
	DDX_Text(pDX, IDC_duichengY, m_duichengY);
	DDX_Text(pDX, IDC_EDITx1, m_x1);
	DDX_Text(pDX, IDC_EDITx2, m_x2);
	DDX_Text(pDX, IDC_EDITx3, m_x3);
	DDX_Text(pDX, IDC_EDITy1, m_y1);
	DDX_Text(pDX, IDC_EDITy2, m_y2);
	DDX_Text(pDX, IDC_EDITy3, m_y3);
	DDX_Text(pDX, IDC_jiaodu, m_jiaodu);
	DDX_Text(pDX, IDC_pingyiX, m_pingyiX);
	DDX_Text(pDX, IDC_pingyiY, m_pingyiY);
	DDX_Text(pDX, IDC_xuanzhuanX, m_xuanzhuanX);
	DDX_Text(pDX, IDC_xuanzhuanY, m_xuanzhuanY);
	DDX_Text(pDX, IDC_biliX, m_biliX);
	DDX_Text(pDX, IDC_biliY, m_biliY);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CShezhiDlg, CDialog)
	//{{AFX_MSG_MAP(CShezhiDlg)
	ON_BN_CLICKED(IDC_BILI, OnBili)
	ON_BN_CLICKED(IDC_DUICHENG, OnDuicheng)
	ON_BN_CLICKED(IDC_PINGYI, OnPingyi)
	ON_BN_CLICKED(IDC_XUANZHUAN, OnXuanzhuan)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CShezhiDlg message handlers

void CShezhiDlg::OnBili() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);// 获取输入值	
    CClientDC dc(m_parent);//创建指向主窗口视图的CClientDC对象。 

	/*
	   比例坐标变换
	*/
	POINT p1,p2,p3;
	CMatrix point1(m_x1,m_y1);
	p1=(POINT)point1.Resize(m_biliX,m_biliY);
	CMatrix point2(m_x2,m_y2);
	p2=point2.Resize(m_biliX,m_biliY);
	CMatrix point3(m_x3,m_y3);
	p3=point3.Resize(m_biliX,m_biliY);

	CRect rect;
	m_parent->GetClientRect(rect);
	m_parent->ScreenToClient(rect);
	SetMapMode((HDC)dc,MM_LOENGLISH);

	SetViewportOrgEx((HDC)dc,512,360,NULL);
	

	CPen pen(PS_SOLID,1,m_color);//设置画笔
	CPen *pOldPen = dc.SelectObject(&pen);

	dc.MoveTo((int)p1.x,(int)p1.y);
	dc.LineTo((int)p2.x,(int)p2.y);
	dc.MoveTo((int)p2.x,(int)p2.y);
	dc.LineTo((int)p3.x,(int)p3.y);
	dc.MoveTo((int)p3.x,(int)p3.y);
	dc.LineTo((int)p1.x,(int)p1.y);
    
	dc.SelectObject(pOldPen);
}

void CShezhiDlg::OnDuicheng() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);// 获取输入值	
    CClientDC dc(m_parent);//创建指向主窗口视图的CClientDC对象。 

	/*
	   对称坐标变换
	*/
	POINT p1,p2,p3;
	CMatrix point1(m_x1,m_y1);
	p1=point1.Symmetry(m_duichengX,m_duichengY);
	CMatrix point2(m_x2,m_y2);
	p2=point2.Symmetry(m_duichengX,m_duichengY);
	CMatrix point3(m_x3,m_y3);
	p3=point3.Symmetry(m_duichengX,m_duichengY);

	CRect rect;
	m_parent->GetClientRect(rect);
	m_parent->ScreenToClient(rect);
	SetMapMode((HDC)dc,MM_LOENGLISH);

	SetViewportOrgEx((HDC)dc,512,360,NULL);
	

	CPen pen(PS_SOLID,1,m_color);//设置画笔
	CPen *pOldPen = dc.SelectObject(&pen);

	dc.MoveTo((int)p1.x,(int)p1.y);
	dc.LineTo((int)p2.x,(int)p2.y);
	dc.MoveTo((int)p2.x,(int)p2.y);
	dc.LineTo((int)p3.x,(int)p3.y);
	dc.MoveTo((int)p3.x,(int)p3.y);
	dc.LineTo((int)p1.x,(int)p1.y);
    
	dc.SelectObject(pOldPen);
}

void CShezhiDlg::OnPingyi() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);// 获取输入值	
    CClientDC dc(m_parent);//创建指向主窗口视图的CClientDC对象。 

	/*平移坐标变换
	m_x1 += m_pingyiX;
	m_y1 += m_pingyiY;
	m_x2 += m_pingyiX;
	m_y2 += m_pingyiY;
	m_x3 += m_pingyiX;
	m_y3 += m_pingyiY;
	*/
	
	POINT p1,p2,p3;
	CMatrix point1(m_x1,m_y1);
	p1=(POINT)point1.Move(m_pingyiX,m_pingyiY);
	CMatrix point2(m_x2,m_y2);
	p2=point2.Move(m_pingyiX,m_pingyiY);
	CMatrix point3(m_x3,m_y3);
	p3=point3.Move(m_pingyiX,m_pingyiY);

	CRect rect;
	m_parent->GetClientRect(rect);
	m_parent->ScreenToClient(rect);
	SetMapMode((HDC)dc,MM_LOENGLISH);

	SetViewportOrgEx((HDC)dc,512,360,NULL);
	

	CPen pen(PS_SOLID,1,m_color);//设置画笔
	CPen *pOldPen = dc.SelectObject(&pen);
/*
	dc.MoveTo((int)m_x1,(int)m_y1);
	dc.LineTo((int)m_x2,(int)m_y2);
	dc.MoveTo((int)m_x2,(int)m_y2);
	dc.LineTo((int)m_x3,(int)m_y3);
	dc.MoveTo((int)m_x3,(int)m_y3);
	dc.LineTo((int)m_x1,(int)m_y1);
*/
	dc.MoveTo((int)p1.x,(int)p1.y);
	dc.LineTo((int)p2.x,(int)p2.y);
	dc.MoveTo((int)p2.x,(int)p2.y);
	dc.LineTo((int)p3.x,(int)p3.y);
	dc.MoveTo((int)p3.x,(int)p3.y);
	dc.LineTo((int)p1.x,(int)p1.y);
 
	dc.SelectObject(pOldPen);
}

void CShezhiDlg::OnXuanzhuan() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);// 获取输入值	
    CClientDC dc(m_parent);//创建指向主窗口视图的CClientDC对象。 

	/*
	   旋转坐标变换
	*/
	POINT p1,p2,p3;
	CMatrix point1(m_x1,m_y1);
	p1=point1.Roat(m_xuanzhuanX,m_xuanzhuanY,m_jiaodu);
	CMatrix point2(m_x2,m_y2);
	p2=point2.Roat(m_xuanzhuanX,m_xuanzhuanY,m_jiaodu);
	CMatrix point3(m_x3,m_y3);
	p3=point3.Roat(m_xuanzhuanX,m_xuanzhuanY,m_jiaodu);

	CRect rect;
	m_parent->GetClientRect(rect);
	m_parent->ScreenToClient(rect);
	SetMapMode((HDC)dc,MM_LOENGLISH);

	SetViewportOrgEx((HDC)dc,512,360,NULL);
	

	CPen pen(PS_SOLID,1,m_color);//设置画笔
	CPen *pOldPen = dc.SelectObject(&pen);

	dc.MoveTo((int)p1.x,(int)p1.y);
	dc.LineTo((int)p2.x,(int)p2.y);
	dc.MoveTo((int)p2.x,(int)p2.y);
	dc.LineTo((int)p3.x,(int)p3.y);
	dc.MoveTo((int)p3.x,(int)p3.y);
	dc.LineTo((int)p1.x,(int)p1.y);
    
	dc.SelectObject(pOldPen);
}

void CShezhiDlg::OnOK() 
{
	// TODO: Add extra validation here
    UpdateData(true);// 获取输入值	
    CClientDC dc(m_parent);//创建指向主窗口视图的CClientDC对象。 

	CRect rect;
	m_parent->GetClientRect(rect);
	m_parent->ScreenToClient(rect);
	SetMapMode((HDC)dc,MM_LOENGLISH);

	SetViewportOrgEx((HDC)dc,512,360,NULL);
	

	CPen pen(PS_SOLID,1,m_color);//设置画笔
	CPen *pOldPen = dc.SelectObject(&pen);

	dc.MoveTo((int)m_x1,(int)m_y1);
	dc.LineTo((int)m_x2,(int)m_y2);
	dc.MoveTo((int)m_x2,(int)m_y2);
	dc.LineTo((int)m_x3,(int)m_y3);
	dc.MoveTo((int)m_x3,(int)m_y3);
	dc.LineTo((int)m_x1,(int)m_y1);
    
	dc.SelectObject(pOldPen);
	
	//CDialog::OnOK();
}

void CShezhiDlg::OnCancel() 
{
	// TODO: Add extra cleanup here	

	CDialog::OnCancel();
}

⌨️ 快捷键说明

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