利用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。请教达人。
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。请教达人。
panel上放一个图片,把想透明的部分用一个颜色显示并将这个颜色设成透明
//新建一个区域对象
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;
你的结帖率不好。