zoukankan      html  css  js  c++  java
  • 弹出悬浮窗口并让置顶程序

    首先是主窗体部分,即要判断窗体的状态来决定是否显示悬浮窗口。
    局部成员声明:

        private FormWindowState fwsPrevious;

        private frmTopMost myTopMost;


    主窗体的Load事件:

        private void frmMain_Load(object sender, System.EventArgs e)

        {

            // Save window state

            fwsPrevious = this.WindowState;

            // Create top most window

            myTopMost = new frmTopMost( this );

        }


        主窗体的SizeChanged事件:

        private void frmMain_SizeChanged(object sender, System.EventArgs e)

        {

            if( this.WindowState == FormWindowState.Minimized )

            {

                // Window minimized

                // Show top most window

                myTopMost.Show();

                this.ShowInTaskbar = false;

            }

            else if( this.WindowState != fwsPrevious )

            {

                // Save current window state

                fwsPrevious = this.WindowState;

            }

        }

           然后,就是还原窗口方法,即供悬浮窗口进行调用的。

        /// <summary>

        /// Restore window state

        /// </summary>

        public void RestoreWindow()

        {

            this.WindowState = fwsPrevious;

            this.ShowInTaskbar = true;

        }


           下来就是悬浮窗口部分代码,首先要设置其窗体的FormBorderStyle为None,然后设置其的TopMost为true,接下来,就是主要是三个鼠标事件的处理,以下,具体说明如何实现的。

           局部成员声明。

        private Point ptMouseCurrrnetPos, ptMouseNewPos,

            ptFormPos, ptFormNewPos;

        private bool blnMouseDown=false;

        private frmMain pParent;

           悬浮窗口的构造函数。

        public frmTopMost( frmMain pMain )

        {

            //

            // Required for Windows Form Designer support

            //

            InitializeComponent();

            // Init main window object

            pParent = pMain;

        }

        悬浮窗口的Load事件。

        private void frmTopMost_Load(object sender, System.EventArgs e)

        {

            this.Show();

            // Init window size and position

            this.Top = 100;

            this.Left = Screen.PrimaryScreen.Bounds.Width - 100;

            this.Width = 80;

            this.Height = 80;

        }

           主要的三个鼠标事件,即MouseDown、 MouseMove、 MouseUp三个事件。

        private void frmTopMost_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)

        {

            if( blnMouseDown )

            {

                //Get the current position of the mouse in the screen

                ptMouseNewPos = Control.MousePosition;

                //Set window position

                ptFormNewPos.X = ptMouseNewPos.X - ptMouseCurrrnetPos.X + ptFormPos.X;

                ptFormNewPos.Y = ptMouseNewPos.Y - ptMouseCurrrnetPos.Y + ptFormPos.Y;

                //Save window position

                Location = ptFormNewPos;

                ptFormPos = ptFormNewPos;

                //Save mouse position

                ptMouseCurrrnetPos = ptMouseNewPos;

            }      

        }

        private void frmTopMost_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)

        {

            if(e.Button==MouseButtons.Left)

            {

                blnMouseDown = true;

                // Save window position and mouse position

                ptMouseCurrrnetPos = Control.MousePosition;

                ptFormPos = Location;

            }

        }

        private void frmTopMost_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)

        {

            if( e.Button == MouseButtons.Left)

                //Return back signal

                blnMouseDown = false;

        }

        然后就是双击悬浮窗体,进行恢复主窗体。

        private void frmTopMost_DoubleClick(object sender, System.EventArgs e)

        {

            SwitchToMain();

        }

        private void SwitchToMain()

        {

            //Change main window status here

            pParent.RestoreWindow();

            //Hide top most window

            this.Hide();

        }

        此外,还可以给悬浮窗口添加ContextMenu,来辅助操作,这里就不细说了。

        private System.Windows.Forms.ContextMenu mnuPopup;

        private System.Windows.Forms.MenuItem mnuMainWindow;

        private System.Windows.Forms.MenuItem mnuExit;

        private void mnuMainWindow_Click(object sender, System.EventArgs e)

        {

            SwitchToMain();

        }

        private void mnuExit_Click(object sender, System.EventArgs e)

        {

            Application.Exit();

        }

  • 相关阅读:
    C#开发规范
    Win32API使用技巧 -- 置顶应用
    Windows开发常用快捷键
    MarkDown简单语法回顾
    样本分布
    复变函数
    set theory
    Oscar的数理统计笔记本
    Oscar的拓扑笔记本
    c语言总结
  • 原文地址:https://www.cnblogs.com/lqsilly/p/2917570.html
Copyright © 2011-2022 走看看