Exemple #1
0
        void Form_Activated(object sender, EventArgs e)
        {
            //  通知 MessageFilter 鼠标已离开 , 参考上面 OnMouseEnterEx() 方法里的注释
            MouseEventUtil.SetLeave(this);

            OnMouseLeaveEx(e);
        }
Exemple #2
0
        private bool RaiseCommonEvent(ref Message m, Control c)
        {
            FormEx    form = c as FormEx;
            ControlEx ctrl = c as ControlEx;

            if (form == null && ctrl == null)
            {
                return(false);
            }


            EventArgs e;

            bool r = false;

            switch (m.Msg)
            {
            case Win32.WM_MOUSEHOVER:
            {
                e = new EventArgs();

                if (form != null)
                {
                    r = form.OnMouseHoverEx(e);
                }
                else if (ctrl != null)
                {
                    r = ctrl.OnMouseHoverEx(e);
                }

                // 如果 r == true , 则返回 true 终止事件冒泡
                if (r)
                {
                    return(true);
                }

                break;
            }

            case Win32.WM_MOUSELEAVE:
            {
                //  用于实现 MouseEnter 事件, 参考 MouseMove 消息处理中使用  MouseEventUtil.SetEnter(c) 的部分
                MouseEventUtil.SetLeave(c);

                e = new EventArgs();

                if (form != null)
                {
                    r = form.OnMouseLeaveEx(e);
                }
                else if (ctrl != null)
                {
                    r = ctrl.OnMouseLeaveEx(e);
                }

                // 如果 r == true , 则返回 true 终止事件冒泡
                if (r)
                {
                    return(true);
                }

                break;
            }
            }

            return(false);
        }
Exemple #3
0
        private bool RaiseMouseEvent(ref Message m, int x, int y, Control c)
        {
            FormEx    form = c as FormEx;
            ControlEx ctrl = c as ControlEx;

            if (form == null && ctrl == null)
            {
                return(false);
            }


            MouseEventArgsEx e;


            bool r = false;


            switch (m.Msg)
            {
            case Win32.WM_MOUSEMOVE:
            {
                e = new MouseEventArgsEx(MouseButtons.None, x, y);

                //  这里是 实现 MouseEnter 事件 。 Windows 消息 中没有 MouseEnter 消息, 所以需要自己实现
                //  .Net WinForm 也是自己实现的, 不过 .Net WinForm 实现的方式是调用一些  Native 方法
                //  比如 RegisterWindowMessage()  TrackMouseEvent()
                //  这对于我们太复杂,我们只需要用 MouseMove 消息 和 MouseEventUtil 配合 就可以实现 Enter 事件
                if (MouseEventUtil.SetEnter(c))
                {
                    if (form != null)
                    {
                        r = form.OnMouseEnterEx(new EventArgs());
                    }
                    else if (ctrl != null)
                    {
                        r = ctrl.OnMouseEnterEx(new EventArgs());
                    }
                }

                // 如果 r == true , 则返回 true 终止事件冒泡
                if (r)
                {
                    return(true);
                }

                if (form != null)
                {
                    r = form.OnMouseMoveEx(e);
                }
                else if (ctrl != null)
                {
                    r = ctrl.OnMouseMoveEx(e);
                }

                // 如果 r == true , 则返回 true 终止事件冒泡
                if (r)
                {
                    return(true);
                }

                break;
            }

            case Win32.WM_LBUTTONDOWN:
            {
                //  实现 Click 事件,参考  MouseUp 消息处理部分
                MouseEventUtil.SetClickDown(c);

                e = new MouseEventArgsEx(MouseButtons.Left, x, y);

                if (form != null)
                {
                    r = form.OnMouseDownEx(e);
                }
                else if (ctrl != null)
                {
                    r = ctrl.OnMouseDownEx(e);
                }

                // 如果 r == true , 则返回 true 终止事件冒泡
                if (r)
                {
                    return(true);
                }

                break;
            }

            case Win32.WM_LBUTTONUP:
            {
                e = new MouseEventArgsEx(MouseButtons.Left, x, y);

                //  这里是 实现  Click 事件 。 Windows 消息 中没有 MouseClick 消息 , 所以需要自己实现
                //  .Net WinForm 也是自己实现的。
                if (MouseEventUtil.CheckClick(c, x, y))
                {
                    MouseEventUtil.SetClickUp(c);

                    if (form != null)
                    {
                        r = form.OnMouseClickEx(e);
                    }
                    else if (ctrl != null)
                    {
                        r = ctrl.OnMouseClickEx(e);
                    }
                }

                // 如果 r == true , 则返回 true 终止事件冒泡
                if (r)
                {
                    return(true);
                }

                if (form != null)
                {
                    r = form.OnMouseUpEx(e);
                }
                else if (ctrl != null)
                {
                    r = ctrl.OnMouseUpEx(e);
                }

                // 如果 r == true , 则返回 true 终止事件冒泡
                if (r)
                {
                    return(true);
                }

                break;
            }
            }


            return(false);
        }