// Test4View.cpp: CTest4View 类的实现
//
#include "stdafx.h"
// SHARED_HANDLERS 可以在实现预览、缩略图和搜索筛选器句柄的
// ATL 项目中进行定义,并允许与该项目共享文档代码。
#ifndef SHARED_HANDLERS
#include "Test4.h"
#endif
#include "Test4Doc.h"
#include "Test4View.h"
#include "Line.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CTest4View
IMPLEMENT_DYNCREATE(CTest4View, CView)
BEGIN_MESSAGE_MAP(CTest4View, CView)
// 标准打印命令
ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview)
ON_COMMAND(IDI_LEFT, &CTest4View::OnLeft)
ON_COMMAND(IDI_RIGHT, &CTest4View::OnRight)
ON_COMMAND(IDI_UP, &CTest4View::OnUp)
ON_COMMAND(IDI_DOWN, &CTest4View::OnDown)
ON_COMMAND(IDI_1PLUS, &CTest4View::OnPlus)
ON_COMMAND(IDI_1MINUS, &CTest4View::OnMinus)
ON_COMMAND(IDI_2SHUN, &CTest4View::OnClockwise)
ON_COMMAND(IDI_2NI, &CTest4View::OnAntiClockwise)
ON_COMMAND(IDI_Xaxis, &CTest4View::OnXaxis)
ON_COMMAND(IDI_Yaxis, &CTest4View::OnYaxis)
ON_COMMAND(32786, &CTest4View::OnOrg)
ON_COMMAND(IDI_XPlus, &CTest4View::OnXplus)
ON_COMMAND(IDI_XNeg, &CTest4View::OnXneg)
ON_COMMAND(IDI_YPlus, &CTest4View::OnYplus)
ON_COMMAND(IDI_YNeg, &CTest4View::OnYneg)
ON_COMMAND(IDI_Return, &CTest4View::OnReturn)
END_MESSAGE_MAP()
// CTest4View 构造/析构
CTest4View::CTest4View() noexcept
{
// TODO: 在此处添加构造代码
}
CTest4View::~CTest4View()
{
}
BOOL CTest4View::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此处通过修改
// CREATESTRUCT cs 来修改窗口类或样式
return CView::PreCreateWindow(cs);
}
// CTest4View 绘图
void CTest4View::OnDraw(CDC* pDC)
{
CTest4Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
GetClientRect(&rect); //获得客户区的大小
pDC->SetMapMode(MM_ANISOTROPIC); //pDC自定义坐标系
pDC->SetWindowExt(rect.Width(), rect.Height()); //设置窗口范围
pDC->SetViewportExt(rect.Width(), -rect.Height()); //x轴水平向右,y轴垂直向上
pDC->SetViewportOrg(rect.Width() / 2, rect.Height() / 2); //屏幕中心为原点
pDC->MoveTo(0, 0);
pDC->LineTo(0, rect.bottom);
pDC->MoveTo(0, 0);
pDC->LineTo(0, -rect.bottom);
pDC->MoveTo(0, 0);
pDC->LineTo(rect.right, 0);
pDC->MoveTo(0, 0);
pDC->LineTo(-rect.right, 0);
if (nFLAG == FALSE)
DrawPolygon(pDC);
else
DoubleBuffer();
//DrawObject(pDC);
}
// CTest4View 打印
BOOL CTest4View::OnPreparePrinting(CPrintInfo* pInfo)
{
// 默认准备
return DoPreparePrinting(pInfo);
}
void CTest4View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 添加额外的打印前进行的初始化过程
}
void CTest4View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 添加打印后进行的清理过程
}
// CTest4View 诊断
#ifdef _DEBUG
void CTest4View::AssertValid() const
{
CView::AssertValid();
}
void CTest4View::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CTest4Doc* CTest4View::GetDocument() const // 非调试版本是内联的
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTest4Doc)));
return (CTest4Doc*)m_pDocument;
}
#endif //_DEBUG
// CTest4View 消息处理程序
void CTest4View::DoubleBuffer()
{
// TODO: 在此处添加实现代码.
CDC* pDC = GetDC();
GetClientRect(&rect); //获得客户区的大小
pDC->SetMapMode(MM_ANISOTROPIC); //pDC自定义坐标系
pDC->SetWindowExt(rect.Width(), rect.Height()); //设置窗口范围
pDC->SetViewportExt(rect.Width(), -rect.Height()); //x轴水平向右,y轴垂直向上
pDC->SetViewportOrg(rect.Width() / 2, rect.Height() / 2); //屏幕中心为原点
CDC MemDC; //内存DC
CBitmap NewBitmap, *pOldBitmap; //内存中承载图像的临时位图
MemDC.CreateCompatibleDC(pDC); //建立与屏幕pDC兼容的MemDC
NewBitmap.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height());
//创建兼容位图
pOldBitmap = MemDC.SelectObject(&NewBitmap); //将兼容位图选人MemDC
MemDC.FillSolidRect(&rect, pDC->GetBkColor()); //按原来背景填充客户区,否则是黑色
MemDC.SetMapMode(MM_ANISOTROPIC); //MemDC自定义坐标系
MemDC.SetWindowExt(rect.Width(), rect.Height());
MemDC.SetViewportExt(rect.Width(), -rect.Height());
MemDC.SetViewportOrg(rect.Width() / 2, rect.Height() / 2);
MemDC.MoveTo(0, 0);
MemDC.LineTo(0, rect.bottom);
MemDC.MoveTo(0, 0);
MemDC.LineTo(0, -rect.bottom);
MemDC.MoveTo(0, 0);
MemDC.LineTo(rect.right, 0);
MemDC.MoveTo(0, 0);
MemDC.LineTo(-rect.right, 0);
// trans.Translate(0, 10);
DrawObject(&MemDC);
pDC->BitBlt(-rect.Width() / 2, -rect.Height() / 2, rect.Width(), rect.Height(),
&MemDC, -rect.Width() / 2, -rect.Height() / 2, SRCCOPY);
//将内存位图复制到屏幕
MemDC.SelectObject(pOldBitmap); //恢复位图
NewBitmap.DeleteObject(); //删除位图
MemDC.DeleteDC(); //删除MemDC
ReleaseDC(pDC);
}
void CTest4View::ReadPoint()
{
P[0].x = -150; P[0].y = -100;
P[1].x = 150; P[1].y = -100;
P[2].x = 150; P[2].y = 100;
P[3].x = -150; P[3].y = 100;
trans.SetMat(P, 4);
}
void CTest4View::DrawObject(CDC *pDC)
{
CLine *line = new CLine;
CP2 t;
for (int i = 0; i < 4; i++)
{
if (i == 0)
{
line->MoveTo(pDC, trans.POld[i]);
t = trans.POld[i];
}
else
line->LineTo(pDC, trans.POld[i]);
}
line->LineTo(pDC, t);
delete line;
}
void CTest4View::DrawPolygon(CDC *pDC)
{
ReadPoint(); //这里重新读了Point的值
CLine *line = new CLine;
CP2 t;
for (int i = 0; i < 4; i++)
{
if (i == 0)
{
line->MoveTo(pDC, trans.POld[i]);
t = trans.POld[i];
}
else
line->LineTo(pDC, trans.POld[i]);
}
line->LineTo(pDC, t);
delete line;
}
void CTest4View::OnLeft()
{
nFLAG = TRUE;
trans.Translate(-10, 0);
Invalidate(FALSE);
}
void CTest4View::OnRight()
{
nFLAG = TRUE;
trans.Translate(10, 0);
Invalidate(FALSE);
}
void CTest4View::OnUp()
{
nFLAG = TRUE;
trans.Translate(0, 10);
Invalidate(FALSE);
}
void CTest4View::OnDown()
{
nFLAG = TRUE;
trans.Translate(0, -10);
Invalidate(FALSE);
}
void CTest4View::OnPlus()
{
nFLAG = TRUE;
trans.Scale(1.5, 1.5);
Invalidate(FALSE);
}
void CTest4View::OnMinus()
{
nFLAG = TRUE;
trans.Scale(0.5, 0.5);
Invalidate(FALSE);
}
void CTest4View::OnClockwise()
{
// TODO: 在此添加命令处理程序代码
nFLAG = TRUE;
CP2 p = (P[0] + P[2]) / 2;
trans.Rotate(-30, p);
Invalidate(FALSE);
}
void CTest4View::OnAntiClockwise()
{
// TODO: 在此添加命令处理程序代码
nFLAG = TRUE;
CP2 p = (P[0] + P[2]) / 2;
trans.Rotate(30, p);
Invalidate(FALSE);
}
void CTest4View::OnXaxis()
{
// TODO: 在此添加命令处理程序代码
nFLAG = TRUE;
trans.ReflectX();
Invalidate(FALSE);
}
void CTest4View::OnYaxis()
{
// TODO: 在此添加命令处理程序代码
nFLAG = TRUE;
trans.ReflectY();
Invalidate(FALSE);
}
void CTest4View::OnOrg()
{
// TODO: 在此添加命令处理程序代码
nFLAG = TRUE;
trans.ReflectOrg();
Invalidate(FALSE);
}
void CTest4View::OnXplus()
{
// TODO: 在此添加命令处理程序代码
nFLAG = TRUE;
trans.Shear(0,1);
Invalidate(FALSE);
}
void CTest4View::OnXneg()
{
// TODO: 在此添加命令处理程序代码
nFLAG = TRUE;
trans.Shear(0, -1);
Invalidate(FALSE);
}
void CTest4View::OnYplus()
{
// TODO: 在此添加命令处理程序代码
nFLAG = TRUE;
trans.Shear(1, 0);
Invalidate(FALSE);
}
void CTest4View::OnYneg()
{
// TODO: 在此添加命令处理程序代码
nFLAG = TRUE;
trans.Shear(-1, 0);
Invalidate(FALSE);
}
void CTest4View::OnReturn()
{
//
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
二维图形几何变换算法 .rar (76个子文件)
Test4 - 副本
Test4.rc 27KB
P2.h 572B
RGB.cpp 2KB
Line.h 299B
res
left.ico 766B
Test4.rc2 666B
right.ico 766B
Toolbar.bmp 2KB
AR_LEFT.ICO 1KB
exit.ico 5KB
minus.ICO 1KB
Test4.ico 66KB
AR_LFDWN.ICO 1KB
AR_RGTUP.ICO 1KB
plus.ico 2KB
AR_UP.ICO 1KB
up.ico 766B
AR_RIGHT.ICO 1KB
Test4Doc.ico 5KB
down.ico 766B
draw.ico 766B
icon1.ico 44KB
AR_DOWN.ICO 1KB
Test4.cpp 5KB
Test4Doc.h 898B
Test4.vcxproj 12KB
P2.cpp 1KB
Line.cpp 2KB
MainFrm.cpp 2KB
stdafx.h 2KB
Test4Doc.cpp 3KB
.vs
Test4
v15
ipch
55490e51d6461155.ipch 116MB
.suo 38KB
Browse.VC.db 74.73MB
MainFrm.h 715B
Debug
Test4.pch 54.19MB
Test4.pdb 3.16MB
P2.obj 20KB
RGB.obj 23KB
Test4Doc.obj 92KB
MainFrm.obj 67KB
vc141.pdb 6.67MB
Test4.log 96B
Line.obj 23KB
vc141.idb 1.38MB
Test4.tlog
CL.write.1.tlog 12KB
rc.command.1.tlog 638B
link.command.1.tlog 4KB
CL.read.1.tlog 196KB
CL.command.1.tlog 13KB
rc.read.1.tlog 9KB
link.write.1.tlog 2KB
Test4.lastbuildstate 215B
rc.write.1.tlog 286B
link.read.1.tlog 13KB
transform.obj.enc 26KB
Transform.obj 25KB
Test4.obj 53KB
stdafx.obj 984KB
Test4View.obj 71KB
Test4.res 97KB
Test4.ilk 3.08MB
Test4.exe 282KB
stdafx.cpp 174B
Test4.h 548B
resource.h 2KB
Test4.sln 1KB
RGB.h 673B
Test4View.h 2KB
Transform.h 667B
targetver.h 299B
Test4.aps 126KB
Test4.vcxproj.filters 5KB
Transform.cpp 2KB
Test4.vcxproj.user 228B
Test4View.cpp 8KB
共 76 条
- 1
资源评论
ccnugrz
- 粉丝: 5
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功