// 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()
{
//

ccnugrz
- 粉丝: 6
最新资源
- (源码)基于AVR单片机的SNES游戏机重置系统.zip
- (源码)基于Python Flask框架的金融资讯网.zip
- (源码)基于Arduino的机械手臂控制系统OpenArms MK.3.zip
- (源码)基于物联网的拉面机系统(Ramen Bot).zip
- (源码)基于Spring Boot和微信小程序的外教资源供需平台.zip
- “英特尔创新大师杯”深度学习挑战赛 赛道2:CCKS2021中文NLP地址要素解析
- (源码)基于vsomeip框架的汽车模拟仪表盘系统.zip
- (源码)基于PaddlePaddle框架的目标检测开发套件.zip
- (源码)基于TensorFlow的深度学习模型构建与训练.zip
- (源码)基于C++编程的智能家居储物柜管理自动化系统.zip
- (源码)基于 HTML、CSS 和 JavaScript 的在线简历博客系统.zip
- (源码)基于InternLM对话模型的智能食谱问答助手.zip
- (源码)基于C语言和多线程技术的矩阵乘法系统.zip
- (源码)基于Arduino的自动热饮售卖机.zip
- (源码)基于PyTorch框架的变分自编码器(VAE)图像生成项目.zip
- (源码)基于PlatformIO框架的TTGO Nes模拟器.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


