Winndows程序设计(MFC)---设计图形类来实现之前的鼠标和键盘消息

改进的地方:

  • 在总文件中添加图形类

  • 在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值