欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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#程序设计的学习有所帮助。

上一篇:

下一篇: