本文仅供学习交流,严禁用于商业用途,如本文涉及侵权请及时联系将于24小时内删除
目录
1.实验内容
贝塞尔曲线是一种常见的曲线,本实例演示的是绘制水平和垂直两个方向的贝塞尔曲线
2.实验原理
CDC类的PolyBezier成员函数是专门用来绘制贝塞尔曲线。
该函数的语法如下:
BOOL PolyBezier( const POINT* lpPoints, int nCount );
参数说明:
● lpPoints:含有曲线控制点和端点的POINT数据结构或CPoint对象。
● nCount:lpPoints数组中点的数目。其值应为曲线数目的3倍以上,因为每条Bezier曲线需要2个控制点和1个终点,初始曲线还需要1个起点。
3.实验代码
(1)新建一个基于对话框的应用程序。
(2)主要程序代码如下:
void CMFCA_对话框Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CPaintDC dc(this);
CPen newpen;
newpen.CreatePen(PS_SOLID, 1, RGB(255, 128, 0));//创建画笔
dc.SelectObject(&newpen);
//垂直
POINT ptv[4];
ptv[0].x = 300;
ptv[0].y = 20;
ptv[1].x = 250;
ptv[1].y = 70;
ptv[2].x = 350;
ptv[2].y = 120;
ptv[3].x = 300;
ptv[3].y = 170;
dc.PolyBezier(ptv, 4); //绘制垂直贝塞尔曲线
//水平
POINT pth[4];
pth[0].x = 20;
pth[0].y = 120;
pth[1].x = 70;
pth[1].y = 70;
pth[2].x = 120;
pth[2].y = 170;
pth[3].x = 170;
pth[3].y = 120;
dc.PolyBezier(pth, 4); //绘制水平贝塞尔曲线
CDialogEx::OnPaint();
}
}
(3)实验结果
4.示例扩展
根据本实例,读者可以: 绘制雕刻效果。