MFC怎么绘制一个圆角矩形

作者&投稿:傅梵 (若有异议请与网页底部的电邮联系)
c++ Mfc中绘制一个红色的矩形,求解答~

说明:此段代码是在MFC的VIEW类中的, OnPaint是消息函数,每次刷新窗口都会调用这个函数,在OnPaint中调用OnDraw函数来进行要求画的东西。Ondraw中前半段画的是填充红色的矩形,后半段中画的是线框是红色矩形,程序已调试通,可以直接使用。
void CMyTestView::OnDraw(CDC* pDC)
{
CMyTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CBrush brush,*pOldBrush;
brush.CreateSolidBrush(RGB(255,0,0));
pOldBrush = pDC->SelectObject(&brush);
pDC->Rectangle(100,250,200,350);
pDC->SelectObject(pOldBrush);
brush.DeleteObject();
CPen NewPen(PS_SOLID,1,RGB(255,0,0));
CPen *pOldPen;
pOldPen = pDC->SelectObject(&NewPen);
pDC->Rectangle(100,100,200,200);
pDC->SelectObject(pOldPen);
ReleaseDC(pDC);
}
void CMyTestView::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
CDC *pDC;
pDC=this->GetDC();
OnDraw(pDC);
// Do not call CView::OnPaint() for painting messages
}

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();

参考代码如下:
#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;
}

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();

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();


空之轨迹fc支线任务 续?加班帮人催书 图
1从菜斯的城南出,沿托尔特平原道行进到红莲之塔之前的场景东边有一个出口,进入,不知名小场境,调查中央的石柱,发现《哈咨少年冒险记。下》,交给康丝坦咨。2从菜斯的城东出,前往圣海姆门,调查三楼正对木桶,发现《31棵丝白树》交给康丝坦咨。会送妨害3。

一个数学问题,关于在圆内作内接图形
连接AO BO EO DO 证明△AOF BOC DOE EOF都是等边三角新即可 不懂可以追问

PS如何画一个小丑图标?
使用"椭圆工具"画出一个30*30的圆形,填充上颜色#fcf8e3,当作小丑的鼻子,现在为止我们的小丑icon就完成啦~以上就是“PS如何画一个小丑图标?”的精彩分享,希望对正在学习PS的你有帮助!更多ps资讯不要错过,尽在!书签收藏,下次学习更方便!学ps,怎么能够0基础入门?如果你正在思考烦恼,那么不妨...

求空之轨迹fc终极配结晶回路方法
范围,是一个圆形区域,有的大有的小。在范 围之外,永远不会被魔兽发现) 鹰目●空空3幻2 在野外、迷宫中行走时,不论魔兽距离多远, 都将显示为实体,便于发现。只要队伍中有一 人装上,就会生效。如果不装,远处的魔兽将 会变得透明,较难发现。 阳炎●幻幻3地2 在野外、迷宫中行走时,难以被魔兽发现:魔 兽不...

找一个游戏,小时候玩的fc游戏
中间的彩色条纹是怎么弄进去的?那时最大的愿望,就是去把百货公司里那一大盒各种颜色的弹珠都买回来,直到很多年后,我才知道那个是——跳棋。 2)跳格子。不知道这个各地是否一样,就是在地上划出几个格子,然后拿钥匙或者回型针做成的串状物扔到里面,然后单脚着地,在格子里面把串状物踢到下一个格子里...

fc手柄连接电脑
首先,普及一下PC手柄基础知识 PC上使用的手柄,基本造型都是模仿的家用机,家用机一般按键都是使用特殊命名 A键,B键,开始键,三角,方块,圆圈。L键R键,左类比,右类比。。。等等,PC上手柄一般也会在手 柄按键上标准类似的按键标志,但是其实际PC手柄识别按键时候,除了类比摇杆和POV以外,都是...

一款日本的FC游戏,飞行射击类的,飞行器是一个红色的横放的水滴形圆的...
加纳战机看看是不是

FC热血格斗怎么调老虎?
第九个日文在第五行的第五个;第十个日文在第一行的倒数第三个再加上第一行的最后一个;第十一个日文在第二行的第二个;第十二个日文在第三行的第二个。2.とらじ: しっほごあああぽおげあほ し在第二竖排第三个 っ在最后一横排第六个 ほ在第一横排倒数第三个(后面的圆圈在第一横排最后...

求一fc游戏名称
是<<街头霸王2010>> 主角是个白衣服的,名字叫KEN,攻击方式是用拳头放出类似光球的东西,吃圆球可以加长攻击距离.每关打完后,会出现一个白色光球,就是时空门,和主角一样大,杀完本关BOSS后,必须在一定的时间内进去,要不然就挂.每次过一大关的时候,就能看到个好几个星球组成的地图.打完一个...

psp空之轨迹fc怎么合出风之领域
游击士手册里的魔法表上写的很清楚风三空一,就是说你要在导力器的一条支链上风属性达到三,空属性达到一,导力器的每条支链的起点都是中间的那个格子,比如奥利维尔只有一条链,可以合出高级魔法,不出意外FC你现在应该有一个妨害2,再在同一条支链上放一个省EP1,就可合出风之领域 参考资料: ...

婺源县17291462009: MFC 画一个圆角的 矩形 我要的不是按钮注意 只是画图! -
陀妹那他: 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->...

婺源县17291462009: 如题, 利用vc++MFC在单文档里面实现一个圆角矩形, 只有一个角是圆角的, 其他三个都是直角 -
陀妹那他: 圆角就是一个四分之一圆吧?画圆有画圆的函数啊,给出x的范围和半径,求出y的坐标.然后每一对(x,y)之间进行连线,就把圆角画出来了啊.至于其他几个角,直接lineto就可以了吧.

婺源县17291462009: MFC如何画矩形 -
陀妹那他: pDC->Rectangle(x1,y1,x2,y2);这条语句的执行结果是在屏幕画面上显示一个左上点在(x1,y1),右下点在(x2,y2)的矩形及其边线.

婺源县17291462009: MFC中如何利用工具栏上的图标画图?比如点击圆拖到窗口中就可以显示这样的 -
陀妹那他: MFC自带的绘图函数有圆形 矩形 圆角矩形 椭圆 好像没有五角星,不过你可以自定义一个函数 截取point A和point B 在两点组成的区域内,用数学几何方法求出五个点的坐标,然后画五条直线.几何求点的思路: 角度 int A[]={90,90+72*1,90+72*2...

婺源县17291462009: vc++MFC画矩形,画的新矩形会覆盖原来的矩形,怎么改??求助 -
陀妹那他: 使用矩形绘制命令rectang,一般输入REC就可以了,当然也可以在CAD工具栏中中选择矩形命令快捷菜单,按照提示中输入第一个角点坐标或者[倒角(C)/标高(E)/圆角(F)/厚度(T)/宽度(W)],选择用倒角C,再按提示将倒角输入值为零,有两个倒角哦,所以要第一个倒角为零后,第二个倒角也为零.然后绘制一个矩形.这样下次绘制矩形就不会出现倒角,或者说倒角为零了.祝你成功

婺源县17291462009: 你好,你哪里有怎么样用mfc画一个矩形,然后用鼠标拖动这个矩形的代码吗? -
陀妹那他: 没有现成的,但可以告诉你怎么写,最简单是是有一个函数:橡皮筋类;另外可以自己画一个矩形,然后判断鼠标点击的区域是否在矩形区域内,移动鼠标时不断的重画矩形

婺源县17291462009: mfc中Gdiplu 怎么圆角显示一张图片 -
陀妹那他: 你把图片做成背景透明的圆角PNG图片,当你画上去的时候自然就像是直接画了一个圆角图片,不要使用GDI画了,画不了PNG,用GDI+可以很简单的绘制,比GDI好用多了.

婺源县17291462009: 怎么用MFC画圆和大小不定的矩形 -
陀妹那他: CDC *pDC=GetDC(); pDC->Ellipse(x1,y1,x2,y2)//画圆的话里面的参数满足x2-x1=y2-y1就可以了 pDC->Rectangle(x1,y1,x2,y2);//画不同大小的矩形只要里面的数值变化就行 自己多试试就知道了

婺源县17291462009: 在cad中如何画圆角矩形? -
陀妹那他: 选择F输入圆角的半径. 把矩形四角放大. 操作如下: 还有这个矩形必须是用直线构成的,不能直接画矩形,然后选择倒角,输入半径.

婺源县17291462009: MFC在对话框上的图像控件上画一个矩形,可以移动 -
陀妹那他: 自己继承一个 图像控件的类,重写onlbuttondown,onmousemove,ondraw等函数

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网