请教一个关于在透明窗体画半透明图形的问题

bluespray 2012-10-06 05:04:35
我希望实现在一个完全透明的窗体上画一个部分透明的图形,但是试过了发现画出图形始终不透明,一直都看不到透明窗体下面的内容(例如桌面),具体实现代码如下:

public Form1()
{
InitializeComponent();
this.TransparencyKey = this.BackColor;
}

private void Form1_Load(object sender, EventArgs e)
{

}

private void Form1_Paint(object sender, PaintEventArgs e)
{
System.Drawing.Graphics g1 = this.CreateGraphics();
g1.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

System.Drawing.Color Mycolor = System.Drawing.Color.FromArgb(128, Color.Yellow);//说明:1-(128/255)=1-0.5=0.5 透明度为0.5,即50%
System.Drawing.SolidBrush sb1 = new System.Drawing.SolidBrush(Mycolor);

g1.FillRectangle(sb1, 0, 0, 550, 550); //半透明矩形
g1.FillEllipse(sb1, 20, 20, 100, 100); //半透明效果
g1.FillEllipse(Brushes.Yellow, 120, 20, 100, 100); //实色效果
sb1.Dispose();
}
}


那个半透明矩形对于透明窗体后面的东西(非窗体本身控件内容)一点都不透明,完全看不到,偶然却发现远程桌面调试却可以看到,还以为实现了,不知道为什么,希望哪位兄弟指点一下,谢谢!

...全文
156 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluespray 2012-10-16
  • 打赏
  • 举报
回复
搬个凳子等人来解答。
bluespray 2012-10-09
  • 打赏
  • 举报
回复
自己顶一下
bluespray 2012-10-07
  • 打赏
  • 举报
回复
没什么效果
crystal_lz 2012-10-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

主要是不知道怎么处理,我用this.TransparencyKey = this.BackColor;把窗体设为全透明后,怎么实现用鼠标可以实时画图呢?用鼠标在透明窗体内部移动时,会直接穿透透明窗体,点击的话,透明窗体就最不是当前窗体了,查了不少资料,好像没有看到有效的解决办法,望赐教!
[/Quote]
this.TransparencyKey = this.BackColor
..你换成
this.BackColor = Color.Red;
this.TransparencyKey = Color.Red;
在看看效果?、、、这是一个神奇又很风骚的问题
bluespray 2012-10-06
  • 打赏
  • 举报
回复
直接在透明窗体预先画图可以实现,比如我贴出的代码,但是不能通过鼠标在透明窗体内部画图
bluespray 2012-10-06
  • 打赏
  • 举报
回复
主要是不知道怎么处理,我用this.TransparencyKey = this.BackColor;把窗体设为全透明后,怎么实现用鼠标可以实时画图呢?用鼠标在透明窗体内部移动时,会直接穿透透明窗体,点击的话,透明窗体就最不是当前窗体了,查了不少资料,好像没有看到有效的解决办法,望赐教!
crystal_lz 2012-10-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

我试过在16位色下有效的,其实我实际需要实现的是在部分透明的窗体通过鼠标来画不透明的图,但是,如果直接设置窗体的Opacity的值,画图的效果也跟着透明了,如果通过this.TransparencyKey = this.BackColor设置全透明,鼠标又跟着穿透了,没法通过鼠标画图,所以想能不能通过在透明窗体初始画一层部分透明的方体,然后再上面通过鼠标滑动画图。

不知道还有没有其他……
[/Quote]
为什么一定要把窗体搞成 半透明的在画图呢?
还有TransparencyKey 不一定就能把窗体穿过 比如 用Green和Red来试试? 虽然不太清楚这是怎么一回事
如果你非要 弄一个半透明的效果出来 办法倒是有

用两个窗体 一个窗体搞成半透明 一个窗体重叠到到上面弄成全透明 图像绘制在全透明的窗体上
bluespray 2012-10-06
  • 打赏
  • 举报
回复
我试过在16位色下有效的,其实我实际需要实现的是在部分透明的窗体通过鼠标来画不透明的图,但是,如果直接设置窗体的Opacity的值,画图的效果也跟着透明了,如果通过this.TransparencyKey = this.BackColor设置全透明,鼠标又跟着穿透了,没法通过鼠标画图,所以想能不能通过在透明窗体初始画一层部分透明的方体,然后再上面通过鼠标滑动画图。

不知道还有没有其他解决办法,可以实现在部分透明的窗体通过鼠标的MouseMove来画不透明的图
crystal_lz 2012-10-06
  • 打赏
  • 举报
回复
当然不会透明
虽然 你的窗体通过this.TransparencyKey = this.BackColor;弄成全透明的了
比如 现在你的窗体的背景色是红色
运行出来 你的窗体空了 透明了
如果我在上面 10,10,100,100 画一个 半透明黑色矩形Color.FromArgb(125,0,0,0);
出来后 矩形你是看到了
不过他是在一个红色的基础上画出来的一个半透明黑色
也就是 虽然你的窗体透明了 可是你的窗体仍然是有背景色的 只是你已经看不到罢了
也就是 你在话的是后 Graphics 用你的窗体的背景色作为 画布的背景色 出来就这个效果
bluespray 2012-10-06
  • 打赏
  • 举报
回复
查了不少帖子,好像是16位色下有效,32位色下无效,不知道有没有办法解决

109,895

社区成员

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

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

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