VC++的MFC单文档画图程序

一、前言

  1. 参考教程

  2. 开发环境:Microsoft Visual Studio Community 2022 (64 位) - Preview

  3. 安装MFC模板:参考

  4. 要求:能处理线、矩形和椭圆的加载和保存工作,要能有颜色和线宽信息。

  5. 最终项目结构
    在这里插入图片描述

二、创建项目

  1. 选择MFC应用在这里插入图片描述

  2. 设置项目名称:Test3
    在这里插入图片描述

  3. 设置应用程序类型和项目样式

在这里插入图片描述

三、编写代码

1.创建自己的形状类

  • 头文件:Test3Shape.h

在这里插入图片描述
在这里插入图片描述

得到

在这里插入图片描述

输入代码:

#pragma once
class Test3Shape : public CObject
{
	DECLARE_SERIAL(Test3Shape)
private:
	double up;
	double down;
	double left;
	double right;
	int body;
	COLORREF col_area;
	COLORREF col_line;
	int line_width;
	bool isOk;
public:
	Test3Shape(); // 无参构造
	Test3Shape(double up, double down, double left, double right, int body, COLORREF col_area, COLORREF col_line, int line_width);	// 构造函数
	virtual void Serialize(CArchive& ar);
	void Draw(CDC* pDC); // 绘图函数
	void IsSelect(double x, double y); // 判断选择函数
	bool CD(); // 返回选择状态函数
	void NoSelect(); // 取消选择状态函数
	
	void MoveUP(); // 向上移动
	void MoveDOWN(); // 向下移动
	void MoveLEFT(); // 向左移动
	void MoveRight(); // 向右移动
	double GetUP(); // 返回up值
	double GetDPWN(); // 返回down值
	double GetLEFT(); // 返回left值
	double GetRIGHT(); // 返回right值
	int GetBODY(); // 返回body值
	COLORREF GetCOL_AREA(); // 返回填充颜色
	COLORREF GetCOL_LINE(); // 返回描边颜色
	int GetLINE_WIDTH(); // 返回线宽
	void ad(); // 个数+
	void da(); // 个数-
};
  • 源文件:Test3Shape.cpp

在这里插入图片描述
在这里插入图片描述

得到

在这里插入图片描述

输入代码:

#include "pch.h"
#include "windef.h"
#include "Test3Shape.h"

IMPLEMENT_SERIAL(Test3Shape, CObject, 1)
Test3Shape::Test3Shape() {}
Test3Shape::Test3Shape(double x, double y, double m, double n, int z, COLORREF c, COLORREF c0, int w) // 构造
{
	up = x;
	down = y;
	left = m;
	right = n;
	body = z;
	col_area = c;
	col_line = c0;
	line_width = w;
	isOk = false;
}

void Test3Shape::Serialize(CArchive& ar)

{
	if (ar.IsStoring()) { //序列化,保存信息
		ar << up << down << left << right << body << col_area << col_line << line_width << isOk;
	}
	else //反序列化,读取信息
	{
		ar >> up >> down >> left >> right >> body >> col_area >> col_line >> line_width >> isOk;
	}

}


void Test3Shape::Draw(CDC* pDC) // 绘画
{
	CBrush NBrush(col_area);
	CPen NPen(PS_SOLID, line_width, col_line);
	pDC->SelectObject(NBrush);
	pDC->SelectObject(NPen);
	switch (body)
	{
	case 1:
	{
		pDC->MoveTo(left, up);
		pDC->LineTo(right, down);
		break;
	}
	case 2:
	{
		pDC->Ellipse(left, down, right, up);
		break;
	}
	case 3:
	{
		pDC->Rectangle(left, down, right, up);
		break;
	}
	}
}
void Test3Shape::IsSelect(double x, double y) // 选择
{
	switch (body)
当您使用MFC基于单个文档工程进行图形处理时,需要使用GDI+(Graphics Device Interface)类库。GDI+包括许多类,如Graphics、Pen、SolidBrush、Image等,可以帮助您在MFC应用程序画图。 其中,最核心的类是CDC类,它是Windows API(应用程序编程接口)中的一个设备上下文类,它封装了了GDI中的所有绘图操作。您可以在您的MFC程序中使用CDC类来绘制图形。 首先,您需要在您的应用程序中创建一个视图(View)对象。视图(View)对象是一个CView类的派生类,它表示应用程序中的一个窗口。您需要在视图对象的OnDraw函数中,使用CDC类来绘制图形。 在OnDraw函数中,可以使用CDC的各种函数来实现图形绘制,如MoveToEx、LineTo、Ellipse、Rectangle等。您还可以使用Pen类和Brush类来设置画笔和刷子的属性。 例如,绘制一条直线的代码如下: void CMyView::OnDraw(CDC* pDC) { // 创建一个画笔对象 CPen pen(PS_SOLID, 2, RGB(255,0,0)); // 实线宽度为2,颜色为红色 // 选择画笔对象 CPen* pOldPen = pDC->SelectObject(&pen); // 移动到指定点 pDC->MoveTo(100, 100); // 绘制一条直线到指定点 pDC->LineTo(200, 200); // 恢复画笔对象 pDC->SelectObject(pOldPen); } 除了基本的绘图操作外,您还可以使用GDI+库中的其他类来实现更高级的图形操作,如绘制文本、图像等。 需要注意的是,为了正确地显示图形,您需要在应用程序的初始化函数中调用AfxEnableControlContainer函数来启用ActiveX控件容器。否则,您可能会遇到诸如图形绘制无法显示等问题。 以上是一个大致的MFC基于单个文档工程,在画图的过程中需要使用的函数和类。具体的实现方式和操作细节可能会因项目不同或个人习惯不同而有所不同。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HYYFKL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值