zoukankan      html  css  js  c++  java
  • WinForm窗体效果

    1. 无边框移动
      [DllImport("user32.dll")]
      public static extern bool ReleaseCapture();
      [DllImport("user32.dll")]
      public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int IParam);
      public const int WM_SYSCOMMAND = 0x0112;
      public const int SC_MOVE = 0xF010;
      public const int HTCAPTION = 0x0002;
      [DllImport("user32")]
      private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, IntPtr lParam);
      private const int WM_SETREDRAW = 0xB;
      private void DoFormMoving()
      {
      if (this.WindowState == FormWindowState.Normal)
      {
      ReleaseCapture();
      SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
      }
      }
      

        

      1. 第二种:
         protected override void WndProc(ref Message m)
                {
                    if (m.Msg == 163 && this.ClientRectangle.Contains(this.PointToClient(new Point(m.LParam.ToInt32()))) && m.WParam.ToInt32() == 2)
                        m.WParam = (IntPtr)1;
                    base.WndProc(ref m);
                    if (m.Msg == 132 && m.Result.ToInt32() == 1)
                        m.Result = (IntPtr)2;
                }
        

          

      2.    #region 窗体移动
                [DllImport("user32.dll")]
                public static extern bool ReleaseCapture();
                [DllImport("user32.dll")]
                public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
                public const int WM_SYSCOMMAND = 0x0112;
                public const int SC_MOVE = 0xF010;
                public const int HTCAPTION = 0x0002;
                private void panelTop_MouseDown(object sender, MouseEventArgs e)
                {
                    ReleaseCapture();
                    SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
                }
        
                private void panelContent_MouseDown(object sender, MouseEventArgs e)
                {
                    ReleaseCapture();
                    SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
                }
        
                #endregion    
        

          

    2. 窗体圆角:
      1.  第一种:   
         public void SetWindowRegion()
                {
                    System.Drawing.Drawing2D.GraphicsPath FormPath;
                    FormPath = new System.Drawing.Drawing2D.GraphicsPath();
                    Rectangle rect = new Rectangle(0, 0, this.Width, this.Height);
                    FormPath = GetRoundedRectPath(rect, 10);//10为圆色半径
                    this.Region = new Region(FormPath);
                }
        
                private GraphicsPath GetRoundedRectPath(Rectangle rect, int radius)
                {
                    int diameter = radius;
                    Rectangle arcRect = new Rectangle(rect.Location, new Size(diameter, diameter));
                    GraphicsPath path = new GraphicsPath();
        
                    path.AddArc(arcRect, 180, 90);//左上角
        
                    arcRect.X = rect.Right - diameter;//右上角
                    path.AddArc(arcRect, 270, 90);
        
                    arcRect.Y = rect.Bottom - diameter;// 右下角
                    path.AddArc(arcRect, 0, 90);
        
                    arcRect.X = rect.Left;// 左下角
                    path.AddArc(arcRect, 90, 90);
                    path.CloseFigure();
                    return path;
                }
        
         private void frmLogin_Resize(object sender, EventArgs e)
                {
                    if (this.WindowState == FormWindowState.Normal)
                    {
                        SetWindowRegion();
                    }
                    else
                    {
                        this.Region = null;
                    }
                }
        

          

          
    1. 窗体阴影
       public const int CS_DropSHADOW = 0x20000;
            public const int GCL_STYLE = (-26);
            [DllImport("user32.dll", CharSet = CharSet.Auto)]
            public static extern int SetClassLong(IntPtr hwnd, int nIndex, int dwNewLong);
            [DllImport("user32.dll", CharSet = CharSet.Auto)]
            public static extern int GetClassLong(IntPtr hwnd, int nIndex);
    
     public frmLogin()
            {
                InitializeComponent();
                SetClassLong(this.Handle, GCL_STYLE, GetClassLong(this.Handle, GCL_STYLE) | CS_DropSHADOW); 
            }
    •  无边框窗体自动控制窗体大小
    •  const int WM_NCHITTEST = 0x0084;
              const int HTLEFT = 10;
              const int HTRIGHT = 11;
              const int HTTOP = 12;
              const int HTTOPLEFT = 13;
              const int HTTOPRIGHT = 14;
              const int HTBOTTOM = 15;
              const int HTBOTTOMLEFT = 0x10;
              const int HTBOTTOMRIGHT = 17;
              protected override void WndProc(ref Message m)
              {
                  base.WndProc(ref m);
                  switch (m.Msg)
                  {
                      case WM_NCHITTEST:
                          Point vPoint = new Point((int)m.LParam & 0xFFFF,
                          (int)m.LParam >> 16 & 0xFFFF);
                          vPoint = PointToClient(vPoint);
                          if (vPoint.X <= 5)
                              if (vPoint.Y <= 5)
                                  m.Result = (IntPtr)HTTOPLEFT;
                              else if (vPoint.Y >= ClientSize.Height - 5)
                                  m.Result = (IntPtr)HTBOTTOMLEFT;
                              else m.Result = (IntPtr)HTLEFT;
                          else if (vPoint.X >= ClientSize.Width - 5)
                              if (vPoint.Y <= 5)
                                  m.Result = (IntPtr)HTTOPRIGHT;
                              else if (vPoint.Y >= ClientSize.Height - 5)
                                  m.Result = (IntPtr)HTBOTTOMRIGHT;
                              else m.Result = (IntPtr)HTRIGHT;
                          else if (vPoint.Y <= 5)
                              m.Result = (IntPtr)HTTOP;
                          else if (vPoint.Y >= ClientSize.Height - 5)
                              m.Result = (IntPtr)HTBOTTOM;
                          break;
                  }
              }

      

  • 相关阅读:
    [NOI Online 提高组]冒泡排序
    三元上升子序列
    上帝造题的七分钟2 / 花神游历各国
    JZOJ 1038. 【SCOI2009】游戏
    android.view.View
    SQLServer导出导出单表数据
    Android-support-v4源码查看
    一些平台
    Installation error: INSTALL_FAILED_CPU_ABI_INCOMPATIBLE
    AsyncTask
  • 原文地址:https://www.cnblogs.com/Zingu/p/15459606.html
Copyright © 2011-2022 走看看