GDI+ 如何为圆角矩形填充渐变背景?

小哥哥1102 2012-10-13 10:17:03
如题,高手请给点提示
...全文
535 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
小哥哥1102 2012-10-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

引用 7 楼 的回复:
圆角矩形我是用的GDI的FrameRgn画的,用GDI+画比较麻烦,使用GDI+的路径当然也可以实现我的功能,不过感觉有些麻烦,通过一楼的回复我已经解决这个问题了

提问说的是GDI+,结果却是找GDI的解决方法,无语.
[/Quote]
是GDI跟GDI_+混合使用,GDI负责话圆角矩形边框,GDI+负责填充渐变背景色
邓学彬 2012-10-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
圆角矩形我是用的GDI的FrameRgn画的,用GDI+画比较麻烦,使用GDI+的路径当然也可以实现我的功能,不过感觉有些麻烦,通过一楼的回复我已经解决这个问题了[/Quote]

提问说的是GDI+,结果却是找GDI的解决方法,无语.






小哥哥1102 2012-10-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

引用 3 楼 的回复:
这个只是绘制矩形的渐变背景,我目前的就是这样,可是我要的是圆角矩形的渐变背景……

你的"圆角矩形"是怎么绘制的?应该是一个"路径"吧?直接DrawPath、FillPath就可以了啊!我那代码,主要是告诉你用渐变画刷.

另外,Gdiplus也有设置裁剪区域,但不如直接FillPath方便.
[/Quote]
谢谢你及时的答复,圆角矩形我是用的GDI的FrameRgn画的,用GDI+画比较麻烦,使用GDI+的路径当然也可以实现我的功能,不过感觉有些麻烦,通过一楼的回复我已经解决这个问题了
邓学彬 2012-10-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
这个只是绘制矩形的渐变背景,我目前的就是这样,可是我要的是圆角矩形的渐变背景……
[/Quote]
你的"圆角矩形"是怎么绘制的?应该是一个"路径"吧?直接DrawPath、FillPath就可以了啊!我那代码,主要是告诉你用渐变画刷.

另外,Gdiplus也有设置裁剪区域,但不如直接FillPath方便.





小哥哥1102 2012-10-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

1.选择区域
rgn.CreateRoundRectRgn(rt.left, rt.top, rt.right, rt.bottom, m_pointArry[0], m_pointArry[1]); //可以设置为椭圆
pdc->SelectClipRgn(&rgn);
2.填充渐变
DrawGraden(HDC hdc, CONST RECT *pRect,……
[/Quote]
谢谢,成功了
小哥哥1102 2012-10-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

1.选择区域
rgn.CreateRoundRectRgn(rt.left, rt.top, rt.right, rt.bottom, m_pointArry[0], m_pointArry[1]); //可以设置为椭圆
pdc->SelectClipRgn(&rgn);
2.填充渐变
DrawGraden(HDC hdc, CONST RECT *pRect,……
[/Quote]
你的意思是设计dc的裁剪区域?好注意,我试试看
小哥哥1102 2012-10-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

使用渐变画刷:LinearGradientBrush
C/C++ code
Gdiplus::LinearGradientBrush linGrBrush(....);
Graphics.FillRectangle(&linGrBrush,Rect(....));
[/Quote]
这个只是绘制矩形的渐变背景,我目前的就是这样,可是我要的是圆角矩形的渐变背景
邓学彬 2012-10-13
  • 打赏
  • 举报
回复
使用渐变画刷:LinearGradientBrush
Gdiplus::LinearGradientBrush linGrBrush(....);
Graphics.FillRectangle(&linGrBrush,Rect(....));







pig357 2012-10-13
  • 打赏
  • 举报
回复
1.选择区域
rgn.CreateRoundRectRgn(rt.left, rt.top, rt.right, rt.bottom, m_pointArry[0], m_pointArry[1]); //可以设置为椭圆
pdc->SelectClipRgn(&rgn);
2.填充渐变
DrawGraden(HDC hdc, CONST RECT *pRect, CONST DWORD *cl, int Num, DWORD dwMode)
3.恢复选区
pdc->SelectClipRgn(&oldrgn);

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧