实例090 绘制贝塞尔曲线(MFC对话框)

本文仅供学习交流,严禁用于商业用途,如本文涉及侵权请及时联系将于24小时内删除

目录

1.实验内容

2.实验原理

3.实验代码

4.示例扩展

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.示例扩展

根据本实例,读者可以: 绘制雕刻效果。

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值