MFC怎么绘制一个圆角矩形

Posted

tags:

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

MFC怎么绘制一个圆角矩形, 我知道新建一个类 继承CButton,
然后添加DrawItem函数,在里面添加什么代码 可以使按钮变成圆角矩形啊?
求代码

参考代码如下:
#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;
参考技术A CRect rect = lpDrawItemStruct->rcItem;
CDC *pDC=CDC::FromHandle(lpDrawItemStruct->hDC);

POINT pt ;

//画按钮的外边框,它是一个半径为5的圆角矩形
pt.x =5;
pt.y =5;
CPen* hOldPen = pDC->SelectObject(&m_BoundryPen);
pDC->RoundRect(&rect, pt);
pDC->SelectObject(hOldPen);
rect.DeflateRect(CSize(GetSystemMetrics(SM_CXEDGE), GetSystemMetrics(SM_CYEDGE)));
CBrush brush(m_color);
pDC->FillRect(rect,&brush );
brush.DeleteObject();本回答被提问者采纳
参考技术B CRect rect = lpDrawItemStruct->rcItem;
CDC *pDC=CDC::FromHandle(lpDrawItemStruct->hDC);

POINT pt ;

//画按钮的外边框,它是一个半径为5的圆角矩形
pt.x =5;
pt.y =5;
CPen* hOldPen = pDC->SelectObject(&m_BoundryPen);
pDC->RoundRect(&rect, pt);
pDC->SelectObject(hOldPen);
rect.DeflateRect(CSize(GetSystemMetrics(SM_CXEDGE), GetSystemMetrics(SM_CYEDGE)));
CBrush brush(m_color);
pDC->FillRect(rect,&brush );
brush.DeleteObject();

C ++ MFC如何绘制选择矩形?

【中文标题】C ++ MFC如何绘制选择矩形?【英文标题】:C++ MFC How to draw selection rectangle? 【发布时间】:2015-08-04 04:11:01 【问题描述】:

我有一个列表控件。我想自己绘制选择矩形。 例如:当我点击一个项目时,它会在该项目上绘制一个选择 ractangle 并且该项目在它旁边(或者可以在其他地方)。

谁能告诉我该怎么做?

谢谢!

【问题讨论】:

我想你错过了理解我的意思。我问怎么做。还是谢谢。 【参考方案1】:

要绘制焦点矩形,请调用DrawFocusRect function。要启用视觉样式,请调用 DrawThemeBackground function(Parts and States:LBCP_ITEMLBPSI_SELECTED)。

无论哪种方式,您都必须create an owner-drawn List Box 才能调整渲染。对于 MFC CListBox 控件,您必须至少覆盖 CListBox::DrawItem(通常还要覆盖 CListBox::MeasureItem)。

【讨论】:

首先我想明确的是,选择矩形是单击项目时出现的蓝色矩形。其次,我的意思是列表控件而不是列表框。所以你能帮我复习一下吗?谢谢 @user2652023:在CListCtrl 中实现此功能的概念与CListView 和CListBox 中的概念相同。如果您正在寻找具体信息,请提出具体问题。 好的,我现在明白了,非常感谢您的帮助

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

Android:如下关于绘制圆角矩形边框问题,怎么解决?

MFC绘制矩形

canvas绘制圆角矩形

Canvas 绘制圆形图片绘制圆角矩形图片?

Android studio圆角矩形的布局如何设计?

以编程方式绘制圆角矩形[重复]