关于SetWindowRgn的困惑

wmouse 2008-04-23 04:07:29
做一个圆角矩形对话框,SetWindowRgn后,变成圆角;然后用FillSolidRect直接上背景色(没有用FillRgn),背景色填充于圆角矩形内,效果良好。

然而,做一个按钮,SetWindowRgn后,形状虽然达到要求,但若直接用FillSolidRect染色,则背景色会超出rgn范围,仍然是直角矩形效果!只能使用FillRgn才能保证染色不超出rgn范围。

这是为什么?为何同样使用SetWindowRgn的两个窗口差别却这么大ni?难道SetWindowRgn的效果对于dialog和别的控件是不同的?
...全文
335 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ddddfbb 2008-04-28
  • 打赏
  • 举报
回复
没试过 回头试下
海忠 2008-04-28
  • 打赏
  • 举报
回复
SetWindowRgn对按钮是有效的,对所有的CWnd均有效。

=========================================================
上海勇进软件有限公司 CTO 阙海忠 敬答各位界面爱好者的问题
公司网站:http://www.uipower.com
zoulie 2008-04-26
  • 打赏
  • 举报
回复
按钮要自绘
ringphone 2008-04-24
  • 打赏
  • 举报
回复
主窗口因为没有父窗口,所以FillSolidRect不会画到外面去,按钮有父窗口,其RGN外范围是可见的,所以就能看到直角矩形了。
wmouse 2008-04-23
  • 打赏
  • 举报
回复
说对按钮一点效果没有,好像也不尽然吧。按钮的区域还是产生了变化,鼠标放在region外(在rect内),按钮没有反应。只是画图的时候没有效果。

tufaqing:
和你讨论一下SelectClipRgn有没有资源回收问题。感觉SelectClipRgn后,也不需要特别的释放一下或者还原一下——因为我尝试了一下,在SelectClipRgn(新的rgn)之后直接SelectClipRgn(NULL),其效果还是老效果,说明系统的ClipRgn没有变,我只是临时加载到dc里一份拷贝,且不用释放。
这样的理解对否?请各位指教~
tufaqing 2008-04-23
  • 打赏
  • 举报
回复
pDC->SelectClipRgn();
pDC->FillSolidRect();
Yofoo 2008-04-23
  • 打赏
  • 举报
回复
SetWindowRgn 对按钮无效

15,980

社区成员

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

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