• C# 鼠标穿透窗体功能


    通过以下代码,在窗体启动后调用方法SetPenetrate() 即可实现窗体的穿透功能。

    同样该功能需要加载命名空间

    using System.Runtime.InteropServices;

         private const uint WS_EX_LAYERED = 0x80000;
            private const int WS_EX_TRANSPARENT = 0x20;
            private const int GWL_STYLE = (-16);
            private const int GWL_EXSTYLE = (-20);
            private const int LWA_ALPHA = 0;
     
            [DllImport("user32", EntryPoint = "SetWindowLong")]
            private static extern uint SetWindowLong(
            IntPtr hwnd,
            int nIndex,
            uint dwNewLong
            );
     
            [DllImport("user32", EntryPoint = "GetWindowLong")]
            private static extern uint GetWindowLong(
            IntPtr hwnd,
            int nIndex
            );
     
            [DllImport("user32", EntryPoint = "SetLayeredWindowAttributes")]
            private static extern int SetLayeredWindowAttributes(
            IntPtr hwnd,
            int crKey,
            int bAlpha,
            int dwFlags
            );
      /// <summary>
      /// 设置窗体具有鼠标穿透效果
      /// </summary>
      /// <param name="flag">true穿透,false不穿透</param>
      public void SetPenetrate(bool flag = true)
      {
        uint style = GetWindowLong(this.Handle, GWL_EXSTYLE);
        if (flag)
          SetWindowLong(this.Handle, GWL_EXSTYLE, style | WS_EX_TRANSPARENT | WS_EX_LAYERED);
        else
          SetWindowLong(this.Handle, GWL_EXSTYLE, style & ~(WS_EX_TRANSPARENT | WS_EX_LAYERED));
        SetLayeredWindowAttributes(this.Handle, 0, 100, LWA_ALPHA);
      }


    原文地址:http://bbs.csdn.net/topics/390325341

  • 相关阅读:
    U-Boot新手入门
    安装交叉编译工具
    Makefile 工程管理
    gcc基本用法
    poj 3264 Balanced Lineup
    hdoj 1166 敌兵布阵
    poj 1363 Rails
    poj 1028 Web Navigation
    zoj 3621 Factorial Problem in Base K
    poj1861最小生成树
  • 原文地址:https://www.cnblogs.com/mqxs/p/3353358.html
Copyright © 2020-2023  润新知