如何能不设置父窗口的WS_CLIPCHILDREN,实现子窗口的透明效果? ( 积分: 300 )

  • 主题发起人 主题发起人 nibble
  • 开始时间 开始时间
N

nibble

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在正在实现一个透明的Panel,翻遍了大富翁上的帖子,都说必须将父窗口的WS_CLIPCHILDREN属性去掉。我试了一下,如果不去掉该属性,那么父窗口的背景色变化之后,透明Panel内部的颜色不会发生变化,也就是没有调用Panel的Invalidate事件进行重画。

但是如果采用去掉WS_CLIPCHILDREN属性的方法,又有两个缺点:
1. 会导致父窗体内所有的控件都会被重画,不管是不是透明的。这样效率明显很低,特别是在父窗体内包含有大量控件的时候。
2. 子窗体(透明Panel)修改父窗体的属性,从软件工程低耦合的角度来看不是一个好的方法。

所以我想问,是否有其他的方法,比如设置透明Panel控件的一些属性,使得父窗体在重画的时候,知道透明Panel必须重画并调用其Invalidate方法?
 
我现在正在实现一个透明的Panel,翻遍了大富翁上的帖子,都说必须将父窗口的WS_CLIPCHILDREN属性去掉。我试了一下,如果不去掉该属性,那么父窗口的背景色变化之后,透明Panel内部的颜色不会发生变化,也就是没有调用Panel的Invalidate事件进行重画。

但是如果采用去掉WS_CLIPCHILDREN属性的方法,又有两个缺点:
1. 会导致父窗体内所有的控件都会被重画,不管是不是透明的。这样效率明显很低,特别是在父窗体内包含有大量控件的时候。
2. 子窗体(透明Panel)修改父窗体的属性,从软件工程低耦合的角度来看不是一个好的方法。

所以我想问,是否有其他的方法,比如设置透明Panel控件的一些属性,使得父窗体在重画的时候,知道透明Panel必须重画并调用其Invalidate方法?
 
用换肤控制件,不就能简单实现了
 
后退
顶部