|
C#实现实现桌面上的遮罩层(鼠标穿透)主要通过一下几个API函数来实现:GetWindowLong,SetWindowLong,SetLayeredWindowAttributes。其中有一个Windows 消息 WS_EX_TRANSPARENT 比较重要,它实现了鼠标穿透的功能。
下面来看看完整的实现代码:
- using System;
- using System.Drawing;
- using System.Windows.Forms;
- using System.Runtime.InteropServices;
- namespace WindowsApplication40
- {
- public partia lclass Form1:Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- [DllImport("user32.dll",EntryPoint="GetWindowLong")]
- public static extern long GetWindowLong(IntPtr hwnd,int nIndex);
- [DllImport("user32.dll",EntryPoint="SetWindowLong")]
- public static extern long SetWindowLong(IntPtr hwnd,int nIndex,long dwNewLong);
- [DllImport("user32",EntryPoint="SetLayeredWindowAttributes")]
- public static extern int SetLayeredWindowAttributes(IntPtr Handle,int crKey,byte bAlpha,int dwFlags);
- const int GWL_EXSTYLE=-20;
- const int WS_EX_TRANSPARENT=0x20;
- const int WS_EX_LAYERED=0x80000;
- const int LWA_ALPHA=2;
-
- private void Form1_Load(objec tsender,EventArgs e)
- {
- this.BackColor=Color.Silver;
- this.TopMost=true;
- this.FormBorderStyle=FormBorderStyle.None;
- this.WindowState=FormWindowState.Maximized;
- SetWindowLong(Handle,GWL_EXSTYLE,GetWindowLong(Handle,GWL_EXSTYLE)|WS_EX_TRANSPARENT|WS_EX_LAYERED);
- SetLayeredWindowAttributes(Handle,0,128,LWA_ALPHA);
- }
- }
- }
复制代码
以上就是介绍C#使用Windows API实现桌面上的遮罩层(鼠标穿透),希望对你有所帮助。
|
|