WinForm特效之桌面上的遮罩层实现方法
程序员文章站
2023-12-16 16:46:40
本文实例讲述了winform特效之桌面上的遮罩层实现方法,分享给大家供大家参考之用。具体如下:
这个一个窗体特效,可以帮你了解几个windows api函数。
效果:w...
本文实例讲述了winform特效之桌面上的遮罩层实现方法,分享给大家供大家参考之用。具体如下:
这个一个窗体特效,可以帮你了解几个windows api函数。
效果:windows桌面上增加一个简单的遮罩层,其中ws_ex_transparent 比较重要,它实现了鼠标穿透的功能。
主要功能代码如下:
using system; using system.drawing; using system.windows.forms; using system.runtime.interopservices; namespace windowsapplication40 { public partial class 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")] private 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(object sender, 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#程序设计的学习有所帮助。