日期:2014-05-19  浏览次数:21696 次

winForm,实现窗体半透明,控件不透明。请问怎样实现呢?多谢啦!
winForm,实现窗体半透明,控件不透明。请问怎样实现呢?多谢啦!

------解决方案--------------------
设置窗体的Opacity属性可使窗体半透明,但是控件也会半透明,看高手解答
------解决方案--------------------
应该是没有办法吧
因为当你将其他控件拖到窗体里时候
再用Opacity属性的话是将整个窗体进行设置的

因为窗体其实本身是一个容器
所以里面的空间就成了它的一部分

而Opacity是将整个容器设置成透明的

所以用Opacity是行不通的
呵呵

估计专门做窗体美工的高手应该会吧 

期待中........!
------解决方案--------------------
用API函数SetLayeredWindowAttributes 可以实现的:

Win32 API函数 SetLayeredWindowAttributes 的原型是

BOOL SetLayeredWindowAttributes(
HWND hwnd, // handle to the layered window
COLORREF crKey, // specifies the color key
BYTE bAlpha, // value for the blend function
DWORD dwFlags // action
);
SetLayeredWindowAttributes函数:
hwnd是透明窗体的句柄,
crKey为颜色值,
bAlpha是透明度,取值范围是[0,255],
dwFlags是透明方式,可以取两个值:
当取值为LWA_ALPHA时,crKey参数无效,bAlpha参数有效;
当取值为LWA_COLORKEY时,bAlpha参数有效而窗体中的所有颜色为crKey的地方将变为透明。
LWA_ALPHA = 0x2
LWA_COLORKEY=0x1


要使使窗体拥有透明效果,首先要有WS_EX_LAYERED扩展属性

(旧的sdk没有定义这个属性,所以可以直接指定为0x80000).

WS_EX_LAYERED = 0x80000

2.通过窗体属性Opacity也可以实现


以下程序通过循环显示窗体的透明度过程,为了让大家看清楚其变化,在循环过程中使用了System.Threading.Thread.Sleep来停顿。



Private Sub button1_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles button1.Click

'窗体的透明度渐变过程

button1.Enabled = False

Dim I As Double

For I = 0.01 To 1 Step 0.01

Me.Opacity = I

System.Windows.Forms.Application.DoEvents()

System.Threading.Thread.Sleep(5)

Next

Me.Opacity = 1

button1.Enabled = True

End Sub



------解决方案--------------------
.
------解决方案--------------------
更改backcolor
------解决方案--------------------
让两个窗体重叠
下面一个窗体半透明
上面一个窗体不透明,但是是一个不规则的窗体,没有控件的地方镂空
拖动下面的窗体的时候上面的窗体跟着动
------解决方案--------------------
楼上真厉害,这种办法也想的出来!
------解决方案--------------------
窗体用半透明的背景图,可以达到同样的效果!
------解决方案--------------------
先将 Fomr.transparencykey 设置唯一种颜色
当 Form.backcolor 与上面的颜色一样时 窗体透明 控件不透明

------解决方案--------------------
两个窗体重叠一下.
把底下的窗体半透明, 上面的窗体做成无边框,然后将窗体选择一个颜色(如红色), 将窗体透明色改为(红色). 只要其他对象不改为红色就OK了.
------解决方案--------------------
嗯!同意LS...
------解决方案--------------------
好像很麻烦啊!学习!