改进的地方:
-
在总文件中添加图形类
-
在cpp文件中:
#include "7Doc.h"
#include"CGraph.h"
#include "7View.h"
- 在view.h文件中:
private:
CGraph m_Graph;
- 在view.cpp文件中:
#include "7Doc.h"
#include "CGraph.h"
#include "7View.h"
void CMy7View::OnDraw(CDC* pDC)
{
CMy7Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
m_Graph.Draw(pDC);
// TODO: 在此处为本机数据添加绘制代码
}
void CMy7View::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_Graph.m_ptBegin= point;
CView::OnLButtonDown(nFlags, point);
}
void CMy7View::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (nFlags == MK_LBUTTON) {
m_Graph.m_ptEnd = point;
InvalidateRect(NULL);
}
CView::OnMouseMove(nFlags, point);
}
void CMy7View::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CRect rect;
GetClientRect(&rect);
m_Graph.Move(nChar, rect, 10);
InvalidateRect(NULL);
CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
- 在CGraph.h文件中:
#pragma once
class CGraph
{
public:
CGraph();
~CGraph();
public:
CPoint m_ptBegin;
CPoint m_ptEnd;
int m_nType;
void Draw(CDC* pDC);
void Move(UINT nChar,CRect rect, int nstep);//CRect rect->移动的区域 int nstep->移动的多少
};
- 在CGraph.cpp文件中:
#include "pch.h"
#include "CGraph.h"
CGraph::CGraph()
{
m_nType = 0;
}
CGraph::~CGraph()
{
}
void CGraph::Draw(CDC* pDC)
{
if (m_nType == 0)//Line
{
pDC->MoveTo(m_ptBegin);
pDC->LineTo(m_ptEnd);
}
else if (m_nType == 1)//Rectangle
{
pDC->Rectangle(m_ptBegin.x, m_ptBegin.y, m_ptEnd.x, m_ptEnd.y);
}
else if (m_nType == 2)
{
pDC->Ellipse(m_ptBegin.x, m_ptBegin.y, m_ptEnd.x, m_ptEnd.y);
}
}
void CGraph::Move(UINT nChar, CRect rect, int nStep)
{
if (nChar == VK_LEFT) {
if (m_ptBegin.x - nStep > 0) {
m_ptBegin.x -= nStep;
m_ptEnd.x -= nStep;
}
else {
m_ptEnd.x -= m_ptBegin.x;
m_ptBegin.x = 0;
}
}
else if (nChar == VK_UP) {
if (m_ptBegin.y - nStep > 0) {
m_ptBegin.y -= nStep;
m_ptEnd.y -= nStep;
}
else {
m_ptEnd.y -= m_ptBegin.y;
m_ptBegin.y = 0;
}
}
else if (nChar == VK_RIGHT) {
if (m_ptEnd.x + nStep < rect.right) {
m_ptBegin.x += nStep;
m_ptEnd.x += nStep;
}
else {
m_ptBegin.x += rect.right - m_ptEnd.x;
m_ptEnd.x = rect.right;
}
}
else if (nChar == VK_DOWN) {
if (m_ptEnd.y + nStep < rect.bottom) {
m_ptBegin.y += nStep;
m_ptEnd.y += nStep;
}
else {
m_ptBegin.y += rect.bottom - m_ptEnd.y;
m_ptEnd.y = rect.bottom;
}
}
}
重点是?图形类->CGraph