c语言圆角矩形实现,MFC怎么绘制一个圆角矩形

满意答案

00e27ab806e4881f8254fe7ae8741834.png

qq244018246

推荐于 2018.04.22

00e27ab806e4881f8254fe7ae8741834.png

采纳率:59%    等级:12

已帮助:6616人

参考代码如下:

#define OFFSET_X 5

#define OFFSET_Y 5

void DrawRoundRectange(Graphics &g,Color pens,int x,int y,int width,int height)

{

//设置画图时的滤波模式为消除锯齿现象

g.SetSmoothingMode(SmoothingModeAntiAlias);

//创建一个红色的画笔

Pen *pen = new Pen(pens,1);

//画矩形上面的边

g.DrawLine(pen,x+OFFSET_X,y,width-OFFSET_X,y);

//画矩形下面的边

g.DrawLine(pen,x+OFFSET_X,y+height,width-OFFSET_X,y+height);

//画矩形左面的边

g.DrawLine(pen,x,y+OFFSET_Y,x,y+height-OFFSET_Y);

//画矩形右面的边

g.DrawLine(pen,x+width,y+OFFSET_Y,x+width,y+height-OFFSET_Y);

//画矩形左上角的圆角

g.DrawArc(pen,x,y,OFFSET_X*2,OFFSET_Y*2,180,90);

//画矩形右下角的圆角

g.DrawArc(pen,x+width-OFFSET_X*2,y+height-OFFSET_Y*2,OFFSET_X*2,OFFSET_Y*2,360,90);

//画矩形右上角的圆角

g.DrawArc(pen,x+width-OFFSET_X*2,y,OFFSET_X*2,OFFSET_Y*2,270,90);

//画矩形左下角的圆角

g.DrawArc(pen,x,y+height-OFFSET_Y*2,OFFSET_X*2,OFFSET_Y*2,90,90);

delete pen;

}

/* 填充颜色 */

void FillRoundRectangle(Graphics &g,Color color,int x,int y,int width,int height)

{

//矩形填充的步骤:

//1、把圆角矩形画分为四个圆角上分成四个同等的扇形外加三个直角矩形

//2、先填充三个直角矩形

//3、然后填充四个角上的扇形

//创建画刷

Brush *brush = new SolidBrush(color);

//填充三个直角矩形

g.FillRectangle(brush,x,y+OFFSET_Y,width,height-OFFSET_Y*2);

g.FillRectangle(brush,x+OFFSET_X,y,width-OFFSET_X*2,height);

//填充四个角上的扇形区

//填充左上角扇形

#define PIE_OFFSET 2

g.FillPie(brush,x,y,OFFSET_X*2+PIE_OFFSET,OFFSET_Y*2+PIE_OFFSET,180,90);

//填充右下角的扇形

g.FillPie(brush,x+width-(OFFSET_X*2+PIE_OFFSET),y+height-(OFFSET_Y*2+PIE_OFFSET),OFFSET_X*2+PIE_OFFSET,OFFSET_Y*2+PIE_OFFSET,360,90);

//填充右上角的扇形

g.FillPie(brush,x+width-(OFFSET_X*2+PIE_OFFSET),y,(OFFSET_X*2+PIE_OFFSET),(OFFSET_Y*2+PIE_OFFSET),270,90);

//填充左下角的扇形

g.FillPie(brush,x,y+height-(OFFSET_X*2+PIE_OFFSET),(OFFSET_X*2+PIE_OFFSET),(OFFSET_Y*2+PIE_OFFSET),90,90);

delete brush;

}

00分享举报

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值