利用CombineRgn相关的api函数实现窗体局部透明。
            Rect rect;
            GetWindowRect(this.panel1.Handle, out rect);
            IntPtr src1 = CreateRectRgn(rect.Left, rect.Top, rect.Right, rect.Bottom);
            IntPtr src2 = CreateRectRgn(rect.Left + 150, rect.Top + 10, rect.Right - 150, rect.Bottom - 10);
            IntPtr dest = CreateRectRgn(0, 0, 1, 1);
            GetWindowRgn(this.panel1.Handle, dest);
            int r = CombineRgn(dest, src1, src2, 4);
            SetWindowRgn(this.panel1.Handle, dest, true); 上述panel1的大小是600*40,想在panel1的中间挖个洞实现panel1的局部透明,能看到panel1后面的窗体。上面的代码的结果是使panel1全部透明了。晕ing。请教达人。

解决方案 »

  1.   

    好像是有opacity属性,这个可以控制透明度,你试试看。
      

  2.   

    用四个panel围个圈,中间空出透明位置。
      

  3.   

    用中间画成透明的png图片,可以实现
      

  4.   

    颜色透明不可以么,应该行吧,
    panel上放一个图片,把想透明的部分用一个颜色显示并将这个颜色设成透明
      

  5.   


              //新建一个区域对象
                Region reg = new Region(this.panel1.ClientRectangle);
                //减去一个矩形,即透明
                reg.Xor(new Rectangle(10,10,40,40));
                //再减去一个矩形,即透明
                reg.Xor(new Rectangle(60, 10, 40, 40));
                //赋给Panel的区域对象即可
                this.panel1.Region = reg;
    你的结帖率不好。