首页 > 代码库 > WinForm特效:桌面上的遮罩层

WinForm特效:桌面上的遮罩层

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

[csharp] view plaincopy
  1. using System;  
  2.   
  3. using System.Drawing;  
  4.   
  5. using System.Windows.Forms;  
  6.   
  7. using System.Runtime.InteropServices;  
  8.   
  9. namespace WindowsApplication40  
  10.   
  11. {  
  12.   
  13.     public partial class Form1 : Form  
  14.   
  15.     {  
  16.   
  17.         public Form1()  
  18.   
  19.         {  
  20.   
  21.             InitializeComponent();  
  22.   
  23.         }  
  24.   
  25.         [DllImport("user32.dll", EntryPoint = "GetWindowLong")]  
  26.   
  27.         public static extern long GetWindowLong(IntPtr hwnd, int nIndex);  
  28.   
  29.   
  30.   
  31.         [DllImport("user32.dll", EntryPoint = "SetWindowLong")]  
  32.   
  33.         public static extern long SetWindowLong(IntPtr hwnd, int nIndex, long dwNewLong);  
  34.   
  35.   
  36.   
  37.         [DllImport("user32", EntryPoint = "SetLayeredWindowAttributes")]  
  38.   
  39.         private static extern int SetLayeredWindowAttributes(IntPtr Handle, int crKey, byte bAlpha, int dwFlags);  
  40.   
  41.   
  42.   
  43.         const int GWL_EXSTYLE = -20;  
  44.   
  45.         const int WS_EX_TRANSPARENT = 0x20;  
  46.   
  47.         const int WS_EX_LAYERED = 0x80000;  
  48.   
  49.         const int LWA_ALPHA = 2;  
  50.   
  51.   
  52.   
  53.   
  54.   
  55.         private void Form1_Load(object sender, EventArgs e)  
  56.   
  57.         {  
  58.   
  59.             this.BackColor = Color.Silver;  
  60.   
  61.             this.TopMost = true;  
  62.   
  63.             this.FormBorderStyle = FormBorderStyle.None;  
  64.   
  65.             this.WindowState = FormWindowState.Maximized;  
  66.   
  67.             SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) | WS_EX_TRANSPARENT | WS_EX_LAYERED);  
  68.   
  69.             SetLayeredWindowAttributes(Handle, 0, 128, LWA_ALPHA );  
  70.   
  71.   
  72.   
  73.         }  
  74.   
  75.     }  
  76.   
  77. }  

WinForm特效:桌面上的遮罩层