MFC制作Windows画图程序(一)

在这里插入图片描述

一、开发环境

Visual Studio,MFC,单文档

二、程序功能

1.实现设置画笔属性,选择画笔粗细的功能
2.实现颜色选择功能
3.实现油漆桶填充功能
4.实现画直线和铅笔画功能
5.实现特殊形状绘制(矩形、三角形、圆、椭圆)功能
6.实现局部放大功能
7.实现插入位图功能
8.实现保存所绘制图形的功能
9.实现橡皮擦功能
10.实现添加文本功能

三、功能实现

我们首先创建了单文档的应用程序MFC_PAINT,然后主要在CMFC_PAINTView.cpp和CMFC_PAINTView.h这两个文件里面写主要的实现代码。
绘图类CMFC_PAINTView,继承自CView,在这个类里面定义了需要用到的成员变量和成员函数。

class CMFC_PAINTView : public CView
{
   
public:
	int m_PenSize;
	int m_TextID;
	COLORREF m_PenColor, m_BrushColor;
	CPoint m_PointBegin, m_PointEnd;
	CEdit* m_Edit = nullptr;
	CPoint m_TextPos = CPoint(0, 0);
	CPoint m_MagnifyCenter;
	int m_MagnifyWidth;
	int m_MagnifyHeight;
	//我们主要通过改变枚举变量的具体的值来切换相应的功能。
	enum DrawType {
   
		LineSegment, Circle, Rectangle, Ellips, Eraser, Pencil, Magnify, Text, Fill, myLoadImage, Triangle
	}m_DrawType;
// Generated message map functions
protected:
	//{
   {AFX_MSG(CMFC_PAINTView)
	//这些是在Menu栏添加相应的事件处理函数自动生成的成员函数,我们通过该
//事件处理函数改变DrawType的值,然后再在三个消息处理函数中用Switch-case
//语句区分相应的功能,为各个功能添加具体的实现代码。
	afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
	afx_msg void OnMouseMove(UINT nFlags, CPoint point);
	afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
	afx_msg void OnDrawLine();       //线段
	afx_msg void OnMenueraser();     //橡皮擦
	afx_msg void OnMenupencil();     //铅笔
	afx_msg void OnMenumagnify();    //放大
	afx_msg void OnMenutext();       //添加文字
	afx_msg void OnMenucircle();     //圆
	afx_msg void OnMenuellips();     //椭圆
	afx_msg void OnMenurectangle();  //矩形
	afx_msg void OnMenusize();       //画笔大小
	afx_msg void OnMenucolor();      //画笔颜色
	afx_msg void OnMenufill();       //油漆桶工具
	afx_msg void OnMenubrushcolor(); //油漆桶填充颜色
	afx_msg void OnFileSave();  //保存图片
	afx_msg void OnFileOpen();   //打开位图
	//}}AFX_MSG
};

接下来我们分别讲解一下各个功能的具体实现:

1 铅笔

首先是铅笔功能,使用铅笔功能用户可以在画板上任意画画,实现该功能的原理是:用m_PointBegin和m_PointEnd两个成员变量记录鼠标移动时的位置用MoveTo和LineTo函数绘制多条首尾顺序相连的极短直线。
具体代码如下:

case DrawType::Pencil: 
{
   
	m_PointBegin = m_PointEnd;
	m_PointEnd = point;
	dc.MoveTo(m_PointBegin);
	dc.LineTo(m_PointEnd);
	break
  • 21
    点赞
  • 175
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值