我希望实现在一个完全透明的窗体上画一个部分透明的图形,但是试过了发现画出图形始终不透明,一直都看不到透明窗体下面的内容(例如桌面),具体实现代码如下:        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();
        }
    }
那个半透明矩形对于透明窗体后面的东西(非窗体本身控件内容)一点都不透明,完全看不到,偶然却发现远程桌面调试却可以看到,还以为实现了,不知道为什么,希望哪位兄弟指点一下,谢谢!

解决方案 »

  1.   

    当然不会透明
    虽然 你的窗体通过this.TransparencyKey = this.BackColor;弄成全透明的了
    比如 现在你的窗体的背景色是红色
    运行出来 你的窗体空了 透明了
    如果我在上面 10,10,100,100 画一个 半透明黑色矩形Color.FromArgb(125,0,0,0);
    出来后 矩形你是看到了
    不过他是在一个红色的基础上画出来的一个半透明黑色
    也就是 虽然你的窗体透明了 可是你的窗体仍然是有背景色的 只是你已经看不到罢了
    也就是 你在话的是后 Graphics 用你的窗体的背景色作为 画布的背景色 出来就这个效果
      

  2.   

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

  3.   

    为什么一定要把窗体搞成 半透明的在画图呢?
    还有TransparencyKey 不一定就能把窗体穿过 比如 用Green和Red来试试? 虽然不太清楚这是怎么一回事
    如果你非要 弄一个半透明的效果出来 办法倒是有用两个窗体 一个窗体搞成半透明 一个窗体重叠到到上面弄成全透明  图像绘制在全透明的窗体上
      

  4.   

    主要是不知道怎么处理,我用this.TransparencyKey = this.BackColor;把窗体设为全透明后,怎么实现用鼠标可以实时画图呢?用鼠标在透明窗体内部移动时,会直接穿透透明窗体,点击的话,透明窗体就最不是当前窗体了,查了不少资料,好像没有看到有效的解决办法,望赐教!
      

  5.   

    this.TransparencyKey = this.BackColor
    ..你换成
    this.BackColor = Color.Red;
    this.TransparencyKey = Color.Red;
    在看看效果?、、、这是一个神奇又很风骚的问题