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

pslh 2007-05-05 02:50:38
winForm,实现窗体半透明,控件不透明。请问怎样实现呢?多谢啦!
...全文
2077 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
林深见鹿dw 2012-05-10
  • 打赏
  • 举报
回复
http://blog.csdn.net/wanlong360599336/article/details/7553568
可以去看看这里,比较简单的方法。
a4215629 2011-12-15
  • 打赏
  • 举报
回复
楼上的这样做子窗体永远不会是活动窗体.... 上面的功能用不了.
wang19920126 2011-04-13
  • 打赏
  • 举报
回复
让两个窗体重叠
下面一个窗体不透明 不加任何背景图片或颜色,指定透明色,让它除控件外其他地方都是透明,也就是没有控件的地方镂空 。
上面一个窗体半透明,指定下面窗体的Owner属性是上面的窗体。
HalfTransparentForm是上层窗体,相当于一个遮罩层,背景图片可加在这个窗体上
HalfTransparentChildForm是下层窗体,功能可以都写在这个窗体上

public HalfTransparentForm()
{
InitializeComponent();
this.Opacity = 0.5; // 窗体透明度
this.childForm = new HalfTransparentChildForm();
this.childForm.Owner = this; // 这支所属窗体
this.childForm.Dock = DockStyle.Fill;
this.childForm.Show();
this.childForm.BringToFront();
}

private HalfTransparentChildForm childForm;

/// <summary>
/// 父窗体大小改变的时候 子窗体也随之改变
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void HalfTransparentForm_Resize(object sender, EventArgs e)
{
if (this.childForm != null)
this.childForm.Size = this.Size;
}

/// <summary>
/// 父窗体位置改变的时候 子窗体也随之改变
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void HalfTransparentForm_LocationChanged(object sender, EventArgs e)
{
if (this.childForm != null)
this.childForm.Location = this.Location;
}
david_anwei 2007-05-10
  • 打赏
  • 举报
回复
好像很麻烦啊!学习!
shinaterry 2007-05-10
  • 打赏
  • 举报
回复
嗯!同意LS...
wzq6511 2007-05-09
  • 打赏
  • 举报
回复
窗体用半透明的背景图,可以达到同样的效果!
wzq6511 2007-05-09
  • 打赏
  • 举报
回复
楼上真厉害,这种办法也想的出来!
王集鹄 2007-05-09
  • 打赏
  • 举报
回复
让两个窗体重叠
下面一个窗体半透明
上面一个窗体不透明,但是是一个不规则的窗体,没有控件的地方镂空
拖动下面的窗体的时候上面的窗体跟着动
pslh 2007-05-09
  • 打赏
  • 举报
回复
要求是这样的呀:
窗体半透明(不是全透明)、控件不透明
这两个条件必需是同时都要满足的。
ymmzl 2007-05-09
  • 打赏
  • 举报
回复
两个窗体重叠一下.
把底下的窗体半透明, 上面的窗体做成无边框,然后将窗体选择一个颜色(如红色), 将窗体透明色改为(红色). 只要其他对象不改为红色就OK了.
pslh 2007-05-09
  • 打赏
  • 举报
回复
半透明!!!
是半半半半半半半半半透明!!!
baggio_gan 2007-05-09
  • 打赏
  • 举报
回复
先将 Fomr.transparencykey 设置唯一种颜色
当 Form.backcolor 与上面的颜色一样时 窗体透明 控件不透明
pslh 2007-05-09
  • 打赏
  • 举报
回复
要半透明的部分中,包括了窗体的标题栏等非客户区,没法用 半透明的背景图 来代替的。
shinaterry 2007-05-06
  • 打赏
  • 举报
回复
.
skyeyecn 2007-05-06
  • 打赏
  • 举报
回复
用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


CathySun118 2007-05-06
  • 打赏
  • 举报
回复
更改backcolor
kiddfanfan 2007-05-05
  • 打赏
  • 举报
回复
应该是没有办法吧
因为当你将其他控件拖到窗体里时候
再用Opacity属性的话是将整个窗体进行设置的

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

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

所以用Opacity是行不通的
呵呵

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

期待中........!
qiaozhiwei 2007-05-05
  • 打赏
  • 举报
回复
设置窗体的Opacity属性可使窗体半透明,但是控件也会半透明,看高手解答

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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