2025年计算机图形学孔令德VS2022新建MFC项目基本操作-绘制金刚石图案

计算机图形学孔令德VS2022新建MFC项目基本操作-绘制金刚石图案计算机图形学孔令德 VS2022 新建 MFC 项目基本操作 VS 没有 MFC 组件 如果你的 vs2022 在安装的时候没有下载 mfc 组件的话 需要自行下载 如果下载了 如下图 没有下载 则点击上图中的安装多个工具和功能 选择单个组件 搜索 MFC 选中下载即可 VS2022 新建 MFC 项目

大家好,我是讯享网,很高兴认识大家。

计算机图形学孔令德VS2022新建MFC项目基本操作

VS没有MFC组件

如果你的vs2022在安装的时候没有下载mfc组件的话,需要自行下载

如果下载了,如下图
在这里插入图片描述
讯享网

没有下载,则点击上图中的安装多个工具和功能

在这里插入图片描述

选择单个组件,搜索MFC

在这里插入图片描述

在这里插入图片描述

选中下载即可

VS2022新建MFC项目

打开VS2022,选择创建新项目

在这里插入图片描述

选择MFC应用,然后下一步

在这里插入图片描述

项目名称命名为test1(自己随便取名)

在这里插入图片描述

然后应用程序类型选择单个文档,然后点完成

在这里插入图片描述

VS2022绘制金刚石图案

结果如下图

在这里插入图片描述

右键点击项目test1,选择添加,选择类

在这里插入图片描述

类名填写CP2

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

为保证命名的统一性,把.h文件和.cpp文件的c删掉
在这里插入图片描述

如图,然后确定

同理,添加Cdiamood类

在这里插入图片描述

绘制金刚石详细代码参考

P2.h文件代码如下

#pragma once class CP2 { public: CP2(void); CP2(double x, double y); virtual ~CP2(void); public: double x, y; }; 

讯享网

P2.cpp文件代码如下

讯享网#include "pch.h" #include "P2.h" CP2::CP2(void) { x = 0.0; y = 0.0; } CP2::CP2(double x, double y) { this->x = x; this->y = y; } CP2::~CP2(void) { } 

Diamood.h文件代码如下

#pragma once #include "P2.h" class CDiamood { public: CDiamood(void); virtual ~CDiamood(void); void SetParameter(int n, double r, CP2 Pt);//设置金刚石的参数 void ReadVertex(void);//用于读入各个等分点的坐标 void Draw(CDC* pDC);//用于绘制金刚石图案 private: int n;//等分点的个数 double r;//圆的半径 CP2 Pt;//金刚石中心点 CP2* P;//用于存储各个等分点 }; 

Diamood.cpp文件代码如下

讯享网#include "pch.h" #include "Diamood.h" #define PI 3.//宏定义π的值 #define ROUND(d) int(d+0.5) //进行四舍五入 CDiamood::CDiamood(void) { n = 0; r = 0; P = NULL; } CDiamood::~CDiamood(void) { delete[]P;//撤销申请的动态数组的内存空间 P = NULL; } void CDiamood::SetParameter(int n, double r, CP2 Pt) { this->n = n; this->r = r; this->Pt = Pt; P = new CP2[n];//动态数组存储等分点 } void CDiamood::ReadVertex(void) { double Theta = 2 * PI / n; for (int i = 0; i < n; i++) { P[i].x = r * cos(i * Theta); P[i].y = r * sin(i * Theta); } } void CDiamood::Draw(CDC* pDC) { for (int i = 0; i <=n-2; i++)//直线连接等分点 { for (int j = i + 1; j <= n - 1; j++) { pDC->MoveTo(ROUND(Pt.x + P[i].x), ROUND(Pt.y + P[i].y)); pDC->LineTo(ROUND(Pt.x + P[j].x), ROUND(Pt.y + P[j].y)); } } } 

test1View.h文件添加部分代码,头文件添加#include "Diamood.h"

 // 操作 public: void DrawObject(CDC* pDC);//绘制图形 // 重写 
讯享网protected: CDiamood diamood; // 生成的消息映射函数 

test1View.cpp文件添加部分代码

OnDrew函数

void Ctest1View::OnDraw(CDC* pDC) { Ctest1Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; //自定义坐标系 CRect rect; GetClientRect(&rect); pDC->SetMapMode(MM_ANISOTROPIC);//设置映射模式 //改变视口坐标系 pDC->SetWindowExt(rect.Width(), rect.Height());//设置窗口 pDC->SetViewportExt(rect.Width(), -rect.Height());//设置视区:x轴水平向右,y轴垂直向上 //客户区中心为坐标系原点,rect.Width()/2,rect.Height()/2坐标是设备坐标系的。 pDC->SetViewportOrg(rect.Width() / 2, rect.Height() / 2); rect.OffsetRect(-rect.Width() / 2, -rect.Height() / 2); DrawObject(pDC); // TODO: 在此处为本机数据添加绘制代码 } 

DrawObject函数

讯享网void Ctest1View::DrawObject(CDC* pDC) { diamood.Draw(pDC); } 

rect.Height() / 2);
rect.OffsetRect(-rect.Width() / 2, -rect.Height() / 2);
DrawObject(pDC);
// TODO: 在此处为本机数据添加绘制代码
}

 DrawObject函数 ```c++ void Ctest1View::DrawObject(CDC* pDC) { diamood.Draw(pDC); } 
小讯
上一篇 2025-03-21 17:48
下一篇 2025-01-08 21:41

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/43506.html