C#:控制WinForm界面的显示

控制WinForm界面在屏幕的四个角落显示,具体代码中有说明:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Tooltip
{
    /// <summary>
    /// 弹出自方向   右上、右下、左上、左下
    /// </summary>
    internal enum PopUp
    {
        LeftUp,     //左上
        LeftDown,   //左下
        RightUp,    //右上
        RightDown   //右下
    }

    /// <summary>
    /// 显示窗体
    /// </summary>
    public class ShowForm
    {
        #region 字段 属性 

        private int screenWidth;    //除任务栏外的屏幕的宽
        private int screenHeight;   //除任务栏外的屏幕的高

        private Timer timer = new Timer();  //计时器

        private Form _form; 
        /// <summary>
        /// 显示的窗体
        /// </summary>
        public Form TheForm
        {
            set 
            {
                this._form = value;
                SetLocation();
            }
            get { return this._form; }
        }

        private System.Drawing.Point locationPoint;
        /// <summary>
        /// 窗体显示位置
        /// </summary>
        public System.Drawing.Point LocationPoint
        {
            set
            {
                this.locationPoint = value;
                LimitShowArea();
            }
            get { return this.locationPoint; }
        }

        private int time;
        /// <summary>
        /// 设置弹出窗体过程的整个时间
        /// </summary>
        public int Time
        {
            set { this.time = value; }
            get { return this.time; }
        }


        #endregion

        #region 构造函数

        /// <summary>
        /// 构造函数
        /// </summary>
        public ShowForm()
        {
            //this._form = form;

            screenWidth = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Width;
            screenHeight = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height;

            this.time = 3;

            //this.timer.Interval = 100;
            this.timer.Tick += new EventHandler(timer_Tick);
            this.timer.Enabled = false;
        }

        #endregion

        #region 动态化窗体 开始 结束
            #region 窗体动态化参数

                private int x_distance;     //运动时在X轴上的距离
                private int y_distance;     //运动时在Y轴上的距离
                private int tickCount;      //总运动次数
                private int x_step;         //运动时在Y轴上的步长
                private int y_step;         //运动时在Y轴上的步长
                private int num = 0;        //运动到第几次       
                private Point reachPoint = new Point();     //运动到的具体位置

            #endregion
        
        /// <summary>
        /// 设置窗体动态化参数
        /// </summary>
        private void SetFormDynamicParms()
        {
            x_distance = this.locationPoint.X - this.screenWidth;
            y_distance = this.locationPoint.Y - this.screenHeight;

            tickCount = this.time * 1000 / this.timer.Interval;
            PopUp popUpDirection = this.JudgeDirection();
            switch (popUpDirection)
            { 
                case PopUp.LeftUp:
                    x_distance = this.locationPoint.X + this._form.Width;       //x_distance = this.locationPoint.X;
                    y_distance = this.locationPoint.Y + this._form.Height;      //y_distance = this.locationPoint.Y 
                    break;
                case PopUp.LeftDown:
                    x_distance = this.locationPoint.X + this._form.Width;       //x_distance = this.locationPoint.X;
                    y_distance = this.locationPoint.Y - this.screenHeight;      
                    break;
                case PopUp.RightUp:
                    x_distance = this.locationPoint.X - this.screenWidth;   
                    y_distance = this.locationPoint.Y + this._form.Height;      //y_distance = this.locationPoint.Y;
                    break;
                default:
                    break;
            }

            x_step = x_distance / tickCount;
            y_step = y_distance / tickCount;


        }

        /// <summary>
        /// 计时器间隔执行函数
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void timer_Tick(object sender, EventArgs e)
        {
            if (this.num == 0)
            {
                SetFormDynamicParms();
                num++;
            }
            else
            {
                this.reachPoint.X = this.locationPoint.X - x_distance + x_step * num;
                this.reachPoint.Y = this.locationPoint.Y - y_distance + y_step * num;
                if (this.num < this.tickCount)
                {
                    this._form.Location = this.reachPoint;
                    this._form.Opacity = this.num * 100 / this.tickCount;
                    this.num++;
                }
                else
                {
                    this._form.Location = this.locationPoint;
                    this._form.Opacity = 100;
                    this.num = 0;
                    this.timer.Stop();
                }
            }
        }

        /// <summary>
        /// 开始显示动态窗体
        /// </summary>
        public void Start()
        {
            this.timer.Enabled = true;
            this.timer.Start();
            this._form.Opacity = 0;
            this._form.Show();

        }

        /// <summary>
        /// 关闭显示的窗体
        /// </summary>
        public void Close()
        {
            this.timer.Stop();
            this.timer.Enabled = false;
            this._form.Close();
        }

        #endregion

        #region 默认显示位置

        private void SetLocation()
        {
            Point lct = new Point();
            lct.X = screenWidth - this.TheForm.Width;
            lct.Y = screenHeight - this.TheForm.Height;
            this.LocationPoint = lct;
        }

        #endregion

        #region 限制弹框的显示区域

        private void LimitShowArea()
        {
            if (this.locationPoint.X < 0 )
            {
                this.locationPoint.X = 0;
            }

            if (this.locationPoint.Y < 0)
            {
                this.locationPoint.Y = 0;
            }

            int maxX = this.screenWidth - this._form.Width;   //Form 不溢出 X轴最大值
            if (this.locationPoint.X > maxX)
            {
                this.locationPoint.X = maxX;
            }

            int maxY = this.screenHeight - this._form.Height;   //Form 不溢出 Y轴最大值
            if (this.locationPoint.Y > maxY)
            {
                this.locationPoint.Y = maxY;
            }
        }

        #endregion

        #region 窗体显示 右上、右下、左上、左下

        /// <summary>
        /// 窗体中心点
        /// </summary>
        /// <returns></returns>
        private Point FormCentre()
        {
            Point frmCentre = new Point();
            frmCentre.X = this.locationPoint.X + this._form.Width / 2;
            frmCentre.Y = this.locationPoint.Y + this._form.Height / 2;
            return frmCentre;
        }

        /// <summary>
        /// 屏幕中心点
        /// </summary>
        /// <returns></returns>
        private Point ScreenCentre()
        {
            Point screenCentre = new Point();
            screenCentre.X = this.screenWidth / 2;
            screenCentre.Y = this.screenHeight / 2;
            return screenCentre;
        }

        /// <summary>
        /// 判断窗体显示自的方向
        /// </summary>
        /// <returns></returns>
        private PopUp JudgeDirection()
        {
            PopUp popup = PopUp.RightDown;

            Point frmCentre = FormCentre();
            Point screenCentre = ScreenCentre();

            if (frmCentre.X < screenCentre.X)
            {
                if (frmCentre.Y < screenCentre.Y)
                {
                    popup = PopUp.LeftUp;
                }
                else
                {
                    popup = PopUp.LeftDown;
                }
            }
            else
            {
                if (frmCentre.Y < screenCentre.Y)
                {
                    popup = PopUp.RightUp;
                }
                else
                {
                    popup = PopUp.RightDown;
                }
            }

            return popup;
        }



        #endregion
    }
}
View Code

 

参考:屏幕、任务栏 工作域大小

当前的屏幕除任务栏外的工作域大小
    this.Width = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Width;
    this.Height = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height;

当前的屏幕包括任务栏的工作域大小
this.Width=System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width;
this.Height=System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height;

任务栏大小
this.Width=System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width-System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Width;
this.Height=System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height-System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height;

winform实现全屏显示
WinForm:
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
this.TopMost = true;   

winform获取屏幕区域
Rectangle ScreenArea = System.Windows.Forms.Screen.GetWorkingArea(this);
View Code

 

posted @ 2015-08-11 20:25  慧由心生  阅读(2943)  评论(0编辑  收藏  举报