MFC绘制一个心形

Posted veis

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC绘制一个心形相关的知识,希望对你有一定的参考价值。

1.效果图(窗口已经被抠出为♥形)

2、核心代码

// WM_INITDIALOG消息
BOOL CRedHeardDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// TODO: 在此添加额外的初始化代码
	CreateHeart(m_rgn);
	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

// WM_PAINT消息
void CRedHeardDlg::OnPaint()
{
	CPaintDC dc(this); // 用于绘制的设备上下文
	CBrush br(RGB(255, 0, 0));
	CRgn r;
	r.CreateRectRgn(0, 0, 0, 0);
	r.CopyRgn(&m_rgn);
	dc.FillRgn(&r, &br);
	this->SetWindowRgn(r, TRUE);
}

// 生成心形的函数
// 其中在文件头部有定义#define M_PI 3.14159265358979323846
void CRedHeardDlg::CreateHeart(CRgn &rgn)
{
	CRect rect;
	GetWindowRect(rect);
	CArray<CPoint> lines;
	int a = 10;
	for (float t = 0; t < 2 * M_PI; t += 0.001)
	{
		float x = 16 * pow(sinf(t), 3);
		float y = 13 * cosf(t) - 5 * cosf(2 * t) - 2 * cosf(3 * t) - cosf(4 * t);
		lines.Add(CPoint(x * a + rect.Width() / 2, -y * a + rect.Height() / 2));
	}
	int nSize = lines.GetSize();
	rgn.CreatePolygonRgn(&lines[0], nSize, ALTERNATE);
}

  

以上是关于MFC绘制一个心形的主要内容,如果未能解决你的问题,请参考以下文章

QT绘制心形图案二

Flutter:如何使用 CustomPaint 绘制心形

python小趣味_520绘制一个心形.

如何在心形可绘制 xml 中添加边框(描边)线

纯 CSS 绘制图形(心形六边形等)

Android 通过Vector Drawable绘制心形