计算机图形学孔令德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.1415926//宏定义π的值
#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);
}