IT分享网

搜索
热搜: 活动 交友 discuz
查看: 587|回复: 0

[源码] 初学c# -- 学习笔记(五) winfrom无边框四周阴影

[复制链接]
发表于 2017-6-13 21:26:04 | 显示全部楼层 |阅读模式
  1. public partial class Form1 : Form
  2. {
  3.     [DllImport("Gdi32.dll", EntryPoint = "CreateRoundRectRgn")]
  4.     private static extern IntPtr CreateRoundRectRgn
  5.     (
  6.         int nLeftRect, // x-coordinate of upper-left corner
  7.         int nTopRect, // y-coordinate of upper-left corner
  8.         int nRightRect, // x-coordinate of lower-right corner
  9.         int nBottomRect, // y-coordinate of lower-right corner
  10.         int nWidthEllipse, // height of ellipse
  11.         int nHeightEllipse // width of ellipse
  12.      );        

  13.     [DllImport("dwmapi.dll")]
  14.     public static extern int DwmExtendFrameIntoClientArea(IntPtr hWnd, ref MARGINS pMarInset);

  15.     [DllImport("dwmapi.dll")]
  16.     public static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, ref int attrValue, int attrSize);

  17.     [DllImport("dwmapi.dll")]
  18.     public static extern int DwmIsCompositionEnabled(ref int pfEnabled);

  19.     private bool m_aeroEnabled;                     // variables for box shadow
  20.     private const int CS_DROPSHADOW = 0x00020000;
  21.     private const int WM_NCPAINT = 0x0085;
  22.     private const int WM_ACTIVATEAPP = 0x001C;

  23.     public struct MARGINS                           // struct for box shadow
  24.     {
  25.         public int leftWidth;
  26.         public int rightWidth;
  27.         public int topHeight;
  28.         public int bottomHeight;
  29.     }

  30.     private const int WM_NCHITTEST = 0x84;          // variables for dragging the form
  31.     private const int HTCLIENT = 0x1;
  32.     private const int HTCAPTION = 0x2;

  33.     protected override CreateParams CreateParams
  34.     {
  35.         get
  36.         {
  37.             m_aeroEnabled = CheckAeroEnabled();

  38.             CreateParams cp = base.CreateParams;
  39.             if (!m_aeroEnabled)
  40.                 cp.ClassStyle |= CS_DROPSHADOW;

  41.             return cp;
  42.         }
  43.     }

  44.     private bool CheckAeroEnabled()
  45.     {
  46.         if (Environment.OSVersion.Version.Major >= 6)
  47.         {
  48.             int enabled = 0;
  49.             DwmIsCompositionEnabled(ref enabled);
  50.             return (enabled == 1) ? true : false;
  51.         }
  52.         return false;
  53.     }

  54.     protected override void WndProc(ref Message m)
  55.     {
  56.         switch (m.Msg)
  57.         {
  58.             case WM_NCPAINT:                        // box shadow
  59.                 if (m_aeroEnabled)
  60.                 {
  61.                     var v = 2;
  62.                     DwmSetWindowAttribute(this.Handle, 2, ref v, 4);
  63.                     MARGINS margins = new MARGINS()
  64.                     {
  65.                         bottomHeight = 1,
  66.                         leftWidth = 1,
  67.                         rightWidth = 1,
  68.                         topHeight = 1
  69.                     };
  70.                     DwmExtendFrameIntoClientArea(this.Handle, ref margins);

  71.                 }
  72.                 break;
  73.             default:
  74.                 break;
  75.         }
  76.         base.WndProc(ref m);

  77.         if (m.Msg == WM_NCHITTEST && (int)m.Result == HTCLIENT)     // drag the form
  78.             m.Result = (IntPtr)HTCAPTION;

  79.     }

  80.     public Form1()
  81.     {
  82.         m_aeroEnabled = false;

  83.         this.FormBorderStyle = FormBorderStyle.None;

  84.         InitializeComponent();
  85.     }
  86. }
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2019-9-19 10:09 , Processed in 0.312502 second(s), 28 queries .

  

QQ|Archiver|手机版|小黑屋|IT分享网 ( 苏ICP备15049123号-2 )  

GMT+8, 2019-9-19 10:09 , Processed in 0.312502 second(s), 28 queries .

Powered by Discuz! X3.2 Designed by 999test.cn

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表