C#窗体布局技巧

2021-09-16 06:12

阅读:917

标签:设置   stat   draw   ptr   tick   service   bre   mouse   object   using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Runtime.InteropServices;namespace QQFrm{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        #region  公共变量        IntPtr Tem_Handle;//获取控件及窗体的句柄        Point CPoint;//获取控件中鼠标的坐标        static int Tem_place = 0;        int Frm_Height = 0;        int FrmHeight = 0;        #endregion        #region  API声明        //获取当前鼠标下可视化控件的句柄        [DllImport("user32.dll")]        public static extern int WindowFromPoint(int xPoint, int yPoint);        //获取指定句柄的父级句柄        [DllImport("user32.dll", ExactSpelling = true, CharSet = CharSet.Auto)]        public static extern IntPtr GetParent(IntPtr hWnd);        //获取屏幕的大小        [DllImport("user32.dll", EntryPoint = "GetSystemMetrics")]        private static extern int GetSystemMetrics(int mVal);        #endregion        #region  获取当前鼠标下可视化控件的句柄        ///         /// 获取当前鼠标下可视化控件的句柄        ///         /// 当前鼠标的X坐标        /// 当前鼠标的Y坐标        public IntPtr FormNameAt(int x, int y)        {            IntPtr Tem_hWnd;//设置存储句柄的变量            Tem_Handle = (IntPtr)(WindowFromPoint(x, y));//获取当前鼠标下可视化控件的句柄            Tem_hWnd = Tem_Handle;//记录原始句柄            while (Tem_hWnd != ((IntPtr)0))//遍历该句柄的父级句柄            {                Tem_Handle = Tem_hWnd;//记录当前句柄                Tem_hWnd = GetParent(Tem_hWnd);//获取父级句柄            }            return Tem_Handle;//返回最底层的父级句柄        }        #endregion        private void timer1_Tick(object sender, EventArgs e)        {            if (this.Top GetSystemMetrics(0) - 3)//如果窗体被移到屏幕的左端或右端                    {                        if (this.Left GetSystemMetrics(0) - 3)//如果窗体被移到屏幕的右端                        {                            if (this.Handle == FormNameAt(Cursor.Position.X, Cursor.Position.Y))//当鼠标移致到该窗体上                            {                                panel_Title.Tag = 3;//设置标识,用于判断窗体在屏幕右端                                timer2.Enabled = false;                                Frm_Height = this.Height;                                this.Left = GetSystemMetrics(0) - this.Width;//使窗体致右                                this.Top = 0;                                this.Height = Screen.AllScreens[0].Bounds.Height;                                Tem_place = 1;                            }                            else                            {                                panel_Title.Tag = 3;                                timer2.Enabled = true;//将窗体在右端进行隐藏                            }                        }                    }                }        }        private void timer2_Tick(object sender, EventArgs e)        {            switch (Convert.ToInt16(panel_Title.Tag.ToString()))//对标识进行判断            {                case 1://顶端隐藏                    {                        if (this.Top (GetSystemMetrics(0) - 5))                            this.Left = GetSystemMetrics(0) - 2;                        break;                    }            }        }        private void panel1_Click(object sender, EventArgs e)        {            this.Close();        }        #region  利用窗体上的控件移动窗体        ///         /// 利用控件移动窗体        ///         /// 窗体        /// 控件的移动事件        public void FrmMove(Form Frm, MouseEventArgs e)  //Form或MouseEventArgs添加命名空间using System.Windows.Forms;        {            if (e.Button == MouseButtons.Left)            {                Point myPosittion = Control.MousePosition;//获取当前鼠标的屏幕坐标                myPosittion.Offset(CPoint.X, CPoint.Y);//重载当前鼠标的位置                Frm.DesktopLocation = myPosittion;//设置当前窗体在屏幕上的位置                Tem_place = 0;                this.Height = FrmHeight;            }        }        #endregion        private void panel_Title_MouseDown(object sender, MouseEventArgs e)        {            timer1.Enabled = false;            CPoint = new Point(-e.X, -e.Y);        }        private void panel_Title_MouseMove(object sender, MouseEventArgs e)        {            FrmMove(this, e);        }        private void panel_Title_MouseUp(object sender, MouseEventArgs e)        {            timer1.Enabled = true;        }        private void Form1_Load(object sender, EventArgs e)        {            Frm_Height = this.Height;            FrmHeight = this.Height;            this.TopMost = true;        }    }}C#窗体布局技巧标签:设置   stat   draw   ptr   tick   service   bre   mouse   object   原文地址:http://www.cnblogs.com/cddaishi/p/7422695.html


评论


亲,登录后才可以留言!