GDI+叠加的问题,怎么清除原有的图像?

Voyageur2 2012-05-15 11:17:03
我继承了一个按钮,在OnPaint()里面用GDI+方法来绘制,是一个圆角矩形,并且设置了SmoothingMode为HighQuality,这样有反锯齿的效果,当然,这时圆角矩形的圆角边某些像素会自动带半透明以实现反锯齿效果。当我把鼠标指到按钮上面时,整个按钮会变色,然后鼠标移开按钮范围,按钮变为先前的颜色;现在的问题是,把鼠标指向按钮,然后鼠标移开按钮范围,就这样重复好几次,按钮圆角边缘的那些半透明像素就一次一次第叠加,变成了Alpha为255的不透明像素,这样完全成了锯齿状,而且很丑。我相信如果使用图片也会遇到同样的问题,每次重绘后,先前的图像都没有被清理,请问怎样解决这个问题?双缓存行不行?
...全文
296 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohuh421 2012-05-15
  • 打赏
  • 举报
回复
1. 绘制了几次是你自己程序逻辑设置问题.
2. 清除也是应该要考虑设计的.
flypig917 2012-05-15
  • 打赏
  • 举报
回复
变成了Alpha为255的不透明像素的原有是背景没有重绘建议把于按钮有关的背景重绘就好了
Voyageur2 2012-05-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

这个情况就得从底向上重绘一边
[/Quote]
你是意思是从背景往上面再画一次吗?我的具体情况是这样的,背景是一个渐变,先用在Dialog上面,而按钮是后安装在Dialog上面的,它与背景相当于是独立的。这个按钮是圆角的矩形,也就是说它的四个圆角以外的部分是透明的,可以直接看到下面的背景。绘制按钮形状全部在按钮的OnPaint()里面,重绘时只能重绘按钮本来的图形,如果要画背景,由于不同地方的背景不同,所以我觉得不可能将背景也先画一次。
向立天 2012-05-15
  • 打赏
  • 举报
回复
这个情况就得从底向上重绘一边
Voyageur2 2012-05-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

先绘制不透明的背景再绘制你需要绘制的透明色
[/Quote]
背景是一个渐变的图像,不是纯色,所以不好画,并且按钮要被放置到不同的地方,每个地方的背景都不同。
Occam's_Razor 2012-05-15
  • 打赏
  • 举报
回复
先绘制不透明的背景再绘制你需要绘制的透明色

15,979

社区成员

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

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