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...
------解决方案--------------------好像很麻烦啊!学习!