winform窗体透明背景实现

  • 格式:pdf
  • 大小:116.51 KB
  • 文档页数:2

winform窗体透明背景实现

因为winform Form窗体的局限性,不允许设置背景⾊为transparent。所以不能实现透明背景。

这⾥有⼀个取巧的⽅法(截Form后的背景)。⾸先来看下实现效果:

想要实现半透明效果只要加个panel ,将panel设置为背景⾊透明,然后加个遮罩图⽚就可以了。

以下附上实现代码:

1 using System;

2 using System.Drawing;

3 using System.Windows.Forms;

4

5 namespace WindowsTrans

6 { 7 public partial class Form1 : Form

8 {

9 private Color tr_color = Color.Transparent;

10 private bool b_start = false;

11 bool[] b_visible = null;

12 public Form1()

13 {

14 InitializeComponent();

15 }

16 private void Form1_Load(object sender, EventArgs e)

17 {

18 SetBackgroundImageTransparent();

19 }

20 private void SetBackgroundImageTransparent()

21 {

22 Point pt = this.PointToScreen(new Point(0, 0));

23 Bitmap b = new Bitmap(this.Width, this.Height);

24 using (Graphics g = Graphics.FromImage(b))

25 {

26 g.CopyFromScreen(pt, new Point(), new Size(this.Width, this.Height));

27 }

28

29 this.BackgroundImage = b;

30 }

31 private void BeginSet()

32 {

33 tr_color = this.TransparencyKey;

34 b_start = true;

35 }

36 private void Setting()

37 {

38 if (b_start)

39 {

40 b_visible = new bool[Controls.Count];

41 for (int i = 0; i < Controls.Count; i++)

42 {

43 b_visible[i] = Controls[i].Visible;

44 Controls[i].Visible = false;

45 }

46 BackgroundImage = null;

47 BackColor = Color.White;

48 b_start = false;

49 this.TransparencyKey = Color.White;

50 }

51 }

52 private void EndSet()

53 {

54 SetBackgroundImageTransparent();

55 this.TransparencyKey = tr_color;

56 for (int i = 0; i < Controls.Count; i++)

57 {

58 Controls[i].Visible = b_visible[i];

59 }

60 b_start = false;

61 }

62

63 private void Form1_Resize(object sender, EventArgs e)

64 {

65 Setting();

66 }

67 private void Form1_ResizeBegin(object sender, EventArgs e)

68 {

69 BeginSet();

70 }

71 private void Form1_ResizeEnd(object sender, EventArgs e)

72 {

73 EndSet();

74 }

75 private void Form1_Move(object sender, EventArgs e)

76 {

77 Setting();

78 }

79 }

80 }