WinForm特效:桌面上的遮罩层

一个窗体特效,帮你了解几个windows api函数.效果:windows桌面上增加一个简单的遮罩层,其中WS_EX_TRANSPARENT 比较重要,它实现了鼠标穿透的功能。

  1. using System;
  2. using System.Drawing;
  3. using System.Windows.Forms;
  4. using System.Runtime.InteropServices;
  5. namespace WindowsApplication40
  6. {
  7. public partial class Form1 : Form
  8. {
  9. public Form1()
  10. {
  11. InitializeComponent();
  12. }
  13. [DllImport("user32.dll", EntryPoint = "GetWindowLong")]
  14. public static extern long GetWindowLong(IntPtr hwnd, int nIndex);
  15. [DllImport("user32.dll", EntryPoint = "SetWindowLong")]
  16. public static extern long SetWindowLong(IntPtr hwnd, int nIndex, long dwNewLong);
  17. [DllImport("user32", EntryPoint = "SetLayeredWindowAttributes")]
  18. private static extern int SetLayeredWindowAttributes(IntPtr Handle, int crKey, byte bAlpha, int dwFlags);
  19. const int GWL_EXSTYLE = -20;
  20. const int WS_EX_TRANSPARENT = 0x20;
  21. const int WS_EX_LAYERED = 0x80000;
  22. const int LWA_ALPHA = 2;
  23. private void Form1_Load(object sender, EventArgs e)
  24. {
  25. this.BackColor = Color.Silver;
  26. this.TopMost = true;
  27. this.FormBorderStyle = FormBorderStyle.None;
  28. this.WindowState = FormWindowState.Maximized;
  29. SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) | WS_EX_TRANSPARENT | WS_EX_LAYERED);
  30. SetLayeredWindowAttributes(Handle, 0, 128, LWA_ALPHA );
  31. }
  32. }
  33. }
上一篇:70. Climbing Stairs(动态规划)


下一篇:《剑指offer》第二十七题(二叉树的镜像)