예제 #1
0
        public GestureManger()
        {
            InitGlobalMouseHook();

            CheckAero();

            if (isAeroEffectOn)
            {
                strokeCanvas = new StrokeCanvas();
                strokeCanvas.Show();
                strokeCanvas.Visible = false;
                gStroke = strokeCanvas.CreateGraphics();
            }
            else
            {
                desktopDC = ys.Common.GetDC(IntPtr.Zero);
                gStroke = Graphics.FromHdc(desktopDC);
            }

            gStroke.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighSpeed;
        }
예제 #2
0
        public GestureManger()
        {
            InitGlobalMouseHook();

            CheckAero();

            if (isAeroEffectOn)
            {
                strokeCanvas = new StrokeCanvas();
                strokeCanvas.Show();
                strokeCanvas.Visible = false;
                gStroke = strokeCanvas.CreateGraphics();
            }
            else
            {
                desktopDC = ys.Common.GetDC(IntPtr.Zero);
                gStroke   = Graphics.FromHdc(desktopDC);
            }

            gStroke.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighSpeed;
        }
예제 #3
0
        private bool mouseHook_OnMouseActivity(object sender, GlogbleMouseHook.MouseMessage wMsg, GlogbleMouseHook.MouseHookStruct lMsg)
        {
            switch (wMsg)
            {
                case GlogbleMouseHook.MouseMessage.RDown:
                    if (release) release = false;
                    else
                    {
                        release = true;
                        return false;
                    }
                    showTrace = true;
                    mouseStroke = "@";
                    lastStoke = string.Empty;
                    ptStart = ptAnchor = lMsg.Point;
                    return true;

                case GlogbleMouseHook.MouseMessage.Move:
                    if (showTrace)
                    {
                        int dx = lMsg.Point.X - ptAnchor.X;
                        int dy = lMsg.Point.Y - ptAnchor.Y;

                        if (dx * dx + dy * dy > ditherThreshold * ditherThreshold)
                        {
                            if (isAeroEffectOn)
                            {
                                // Prevent the command from affecting the canvas window.
                                if (strokeCanvas.IsDisposed
                                    || strokeCanvas == null)
                                {
                                    strokeCanvas = new StrokeCanvas();
                                    strokeCanvas.Show();
                                    gStroke = strokeCanvas.CreateGraphics();
                                }
                                if (!strokeCanvas.Visible)
                                {
                                    ys.Common.ShowWindow(strokeCanvas.Handle, Common.WindowState.SW_SHOWNA);
                                    if (strokeCanvas.WindowState != System.Windows.Forms.FormWindowState.Maximized)
                                        strokeCanvas.WindowState = System.Windows.Forms.FormWindowState.Maximized;
                                }
                            }

                            gStroke.DrawLine(penStroke, ptAnchor.X, ptAnchor.Y, lMsg.Point.X, lMsg.Point.Y);
                            ptAnchor = lMsg.Point;

                            string stroke = string.Empty;
                            if (dx > Math.Abs(dy) && dx > 0)
                                stroke += ">";
                            else if (Math.Abs(dx) > Math.Abs(dy) && dx < 0)
                                stroke += "<";
                            else if (dy > Math.Abs(dx) && dy > 0)
                                stroke += "v";
                            else if (Math.Abs(dy) > Math.Abs(dx) && dy < 0)
                                stroke += "^";

                            if (stroke != lastStoke)
                                mouseStroke += stroke;

                            lastStoke = stroke;
                        }
                    }
                    return false;

                case GlogbleMouseHook.MouseMessage.RUp:
                    if (!release)
                    {
                        showTrace = false;

                        // If mouse move little, invoke the default mosue event.
                        if (Math.Pow(lMsg.Point.X - ptStart.X, 2) + Math.Pow(lMsg.Point.Y - ptStart.Y, 2) <= ditherThreshold * ditherThreshold)
                        {
                            ys.StrokeParser.SendStrokes("MR");
                        }
                        else
                        {
                            release = true;

                            if (isAeroEffectOn)
                            {
                                // Clear the stroke on screen
                                strokeCanvas.Refresh();
                                strokeCanvas.Visible = false;
                            }
                            else
                            {
                                ys.Common.InvalidateRect(IntPtr.Zero, IntPtr.Zero, true);
                            }
                            LaunchArrows();
                        }
                        return true;
                    }
                    else
                        return false;

                default:
                    return false;
            }
        }
예제 #4
0
        private bool mouseHook_OnMouseActivity(object sender, GlogbleMouseHook.MouseMessage wMsg, GlogbleMouseHook.MouseHookStruct lMsg)
        {
            switch (wMsg)
            {
            case GlogbleMouseHook.MouseMessage.RDown:
                if (release)
                {
                    release = false;
                }
                else
                {
                    release = true;
                    return(false);
                }
                showTrace   = true;
                mouseStroke = "@";
                lastStoke   = string.Empty;
                ptStart     = ptAnchor = lMsg.Point;
                return(true);

            case GlogbleMouseHook.MouseMessage.Move:
                if (showTrace)
                {
                    int dx = lMsg.Point.X - ptAnchor.X;
                    int dy = lMsg.Point.Y - ptAnchor.Y;

                    if (dx * dx + dy * dy > ditherThreshold * ditherThreshold)
                    {
                        if (isAeroEffectOn)
                        {
                            // Prevent the command from affecting the canvas window.
                            if (strokeCanvas.IsDisposed ||
                                strokeCanvas == null)
                            {
                                strokeCanvas = new StrokeCanvas();
                                strokeCanvas.Show();
                                gStroke = strokeCanvas.CreateGraphics();
                            }
                            if (!strokeCanvas.Visible)
                            {
                                ys.Common.ShowWindow(strokeCanvas.Handle, Common.WindowState.SW_SHOWNA);
                                if (strokeCanvas.WindowState != System.Windows.Forms.FormWindowState.Maximized)
                                {
                                    strokeCanvas.WindowState = System.Windows.Forms.FormWindowState.Maximized;
                                }
                            }
                        }

                        gStroke.DrawLine(penStroke, ptAnchor.X, ptAnchor.Y, lMsg.Point.X, lMsg.Point.Y);
                        ptAnchor = lMsg.Point;

                        string stroke = string.Empty;
                        if (dx > Math.Abs(dy) && dx > 0)
                        {
                            stroke += ">";
                        }
                        else if (Math.Abs(dx) > Math.Abs(dy) && dx < 0)
                        {
                            stroke += "<";
                        }
                        else if (dy > Math.Abs(dx) && dy > 0)
                        {
                            stroke += "v";
                        }
                        else if (Math.Abs(dy) > Math.Abs(dx) && dy < 0)
                        {
                            stroke += "^";
                        }

                        if (stroke != lastStoke)
                        {
                            mouseStroke += stroke;
                        }

                        lastStoke = stroke;
                    }
                }
                return(false);

            case GlogbleMouseHook.MouseMessage.RUp:
                if (!release)
                {
                    showTrace = false;

                    // If mouse move little, invoke the default mosue event.
                    if (Math.Pow(lMsg.Point.X - ptStart.X, 2) + Math.Pow(lMsg.Point.Y - ptStart.Y, 2) <= ditherThreshold * ditherThreshold)
                    {
                        ys.StrokeParser.SendStrokes("MR");
                    }
                    else
                    {
                        release = true;

                        if (isAeroEffectOn)
                        {
                            // Clear the stroke on screen
                            strokeCanvas.Refresh();
                            strokeCanvas.Visible = false;
                        }
                        else
                        {
                            ys.Common.InvalidateRect(IntPtr.Zero, IntPtr.Zero, true);
                        }
                        LaunchArrows();
                    }
                    return(true);
                }
                else
                {
                    return(false);
                }

            default:
                return(false);
            }
        }