zoukankan      html  css  js  c++  java
  • 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);
    }
    

      

  • 相关阅读:
    JavaScript: RegExp + replace
    JavaScript:布局
    DOM和BOM区别
    正则表达式
    a report about the history of pragrem
    web第6次作业position
    web api
    DOM Event:事件流动(Event Flow)
    FOR衍生对象
    前端的发展
  • 原文地址:https://www.cnblogs.com/veis/p/12930515.html
Copyright © 2011-2022 走看看