MFC利用CPen与CBrush绘制实心圆

实现代码如下

void CMyPaintView::MDrawRedArc(CPoint point, int mSize)
{

CPoint tmppoint;
tmppoint.x=point.x-mSize;
tmppoint.y=point.y-m_Size;

CPen pNewPen;
CPen *pOldPen;
pNewPen.CreatePen(PS_SOLID,1,RGB(255,0,0));
pOldPen = pDLMemDC.SelectObject(&pNewPen);

//定义画刷填充圆
CBrush fillbrush;
CBrush *oldbrush;
fillbrush.CreateSolidBrush(RGB(255,0,0));
oldbrush=pDLMemDC.SelectObject(&fillbrush);

pDLMemDC.Ellipse(tmppoint.x,tmppoint.y,tmppoint.x+mSize,tmppoint.y+mSize); 

pDLMemDC.SelectObject(oldbrush);
pDLMemDC.SelectObject(pOldPen);
fillbrush.DeleteObject();
pNewPen.DeleteObject();

}

point为实心圆圆心所在的位置,mSize为圆的半径

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
MFC中,可以使用CPenCBrush类来绘制的贝塞尔曲线。以下是绘制的贝塞尔曲线的基本步骤: 1. 定义一个CPen对象和一个CBrush对象,用于绘制的轮廓和填充。 2. 使用CDC的BeginPath()函数开始绘制路径。 3. 使用CDC的MoveTo()函数将绘图点移动到椭的起点。 4. 使用CDC的PolyBezierTo()函数绘制的贝塞尔曲线。 5. 使用CDC的EndPath()函数结束绘制路径。 6. 使用CDC的SelectObject()函数选择CPenCBrush对象,用于绘制的轮廓和填充。 7. 使用CDC的StrokeAndFillPath()函数绘制。 以下是一个示例代码,演示如何在MFC中使用贝塞尔曲线绘制: ```C++ void CMyView::OnDraw(CDC* pDC) { // 定义一个红色的笔和一个绿色的刷子 CPen pen(PS_SOLID, 1, RGB(255, 0, 0)); CBrush brush(RGB(0, 255, 0)); // 选择笔和刷子 pDC->SelectObject(&pen); pDC->SelectObject(&brush); // 开始绘制路径 pDC->BeginPath(); // 定义椭的参数 CRect rect(100, 100, 200, 150); float a = (rect.Width() - 1) / 2.0f; float b = (rect.Height() - 1) / 2.0f; float cx = rect.left + a; float cy = rect.top + b; // 计算椭的贝塞尔曲线控制点 float magic = 0.551915024494f; CPoint points[13] = { CPoint((int)cx, (int)(cy - b)), // P1 CPoint((int)(cx + a * magic), rect.top), // P2 CPoint(rect.right, (int)(cy - b * magic)), // P3 CPoint((int)(cx + a), (int)cy), // P4 CPoint(rect.right, (int)(cy + b * magic)), // P5 CPoint((int)(cx + a * magic), rect.bottom), // P6 CPoint((int)cx, (int)(cy + b)), // P7 CPoint((int)(cx - a * magic), rect.bottom), // P8 CPoint(rect.left, (int)(cy + b * magic)), // P9 CPoint((int)(cx - a), (int)cy), // P10 CPoint(rect.left, (int)(cy - b * magic)), // P11 CPoint((int)(cx - a * magic), rect.top), // P12 CPoint((int)cx, (int)(cy - b)) // P13 }; // 绘制的贝塞尔曲线 pDC->MoveTo(points[0]); pDC->PolyBezierTo(points + 1, 12); // 结束绘制路径 pDC->EndPath(); // 绘制 pDC->StrokeAndFillPath(); } ``` 在上述示例代码中,我们定义了一个椭,然后计算了椭的贝塞尔曲线控制点,最后使用PolyBezierTo()函数绘制了椭的贝塞尔曲线。最终使用StrokeAndFillPath()函数绘制了椭的轮廓和填充。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值