• C#软件开发实例.个人定制自己的屏幕抓图工具(八)加入了截图功能键盘


    章文件夹

    尽管加入了放大镜的功能,可是在进行像素级的定位时,还是不easy精确定位,在用鼠标操作时要改变一两个像素的位置还是有些困难的。

    处理键盘按下事件

            /// <summary>
            /// 处理键盘按下事件
            /// 用于实现下面功能:
            /// 当用户按下Esc键时,退出截图过程;
            /// Shift + Enter 開始截图的功能;
            /// 使用键盘的上下左右键调整截图位置的功能。
            /// Shift + 上下左右键调整截图区域大小的功能;
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void Form1_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.Escape)
                {
                    ExitCutImage(true);
                    // 假设不加这一句。热键仅仅能在窗体隐藏后使用一次,之后就不起作用了。
                    //RegisterHotKey(Handle, 100, 2 | 1, Keys.A);
                }
                if (e.Shift && e.KeyCode == Keys.Enter)
                {
                    if (!this.lbl_CutImage.Visible)
                    {
                        this.isCuting = true;
                        this.beginPoint = MousePosition;
                        this.endPoint = MousePosition;
                        SaveCutImageSize(MousePosition, MousePosition);
                        UpdateCutInfoLabel(UpdateUIMode.ShowInfoBox | UpdateUIMode.ShowCutImage);
                    }
                }
                if (e.KeyCode == Keys.Left)
                {
                    if (this.lbl_CutImage.Visible)
                    {
                        if (e.Shift)
                        {
                            if (this.cutImageRect.Width > 1)
                            {
                                this.cutImageRect.Width -= 1;
                                Cursor.Position = new Point(Cursor.Position.X - 1, Cursor.Position.Y);
                                UpdateCutInfoLabel(UpdateUIMode.None);
                            }
                        }
                        else
                        {
                            if (this.cutImageRect.Left > -1)
                            {
                                this.cutImageRect.X -= 1;
                                UpdateCutInfoLabel(UpdateUIMode.None);
                            }
                        }
                    }
                    else
                    {
                        if (Cursor.Position.X > -1)
                        {
                            Cursor.Position = new Point(Cursor.Position.X - 1, Cursor.Position.Y);
                        }
                    }
                }
                if (e.KeyCode == Keys.Right)
                {
                    if (this.lbl_CutImage.Visible)
                    {
                        if (e.Shift)
                        {
                            if (this.cutImageRect.Right < this.Width + 1)
                            {
                                this.cutImageRect.Width += 1;
                                Cursor.Position = new Point(Cursor.Position.X + 1, Cursor.Position.Y);
                                UpdateCutInfoLabel(UpdateUIMode.None);
                            }
                        }
                        else
                        {
                            if (this.cutImageRect.Right < this.Width + 1)
                            {
                                this.cutImageRect.X += 1;
                                UpdateCutInfoLabel(UpdateUIMode.None);
                            }
                        }
                    }
                    else
                    {
                        if (Cursor.Position.X < this.Width + 1)
                        {
                            Cursor.Position = new Point(Cursor.Position.X + 1, Cursor.Position.Y);
                        }
                    }
                }
    
                if (e.KeyCode == Keys.Up)
                {
                    if (this.lbl_CutImage.Visible)
                    {
                        if (e.Shift)
                        {
                            if (this.cutImageRect.Height > 1)
                            {
                                this.cutImageRect.Height -= 1;
                                Cursor.Position = new Point(Cursor.Position.X, Cursor.Position.Y - 1);
                                UpdateCutInfoLabel(UpdateUIMode.None);
                            }
                        }
                        else
                        {
                            if (this.cutImageRect.Top > -1)
                            {
                                this.cutImageRect.Y -= 1;
                                UpdateCutInfoLabel(UpdateUIMode.None);
                            }
                        }
                    }
                    else
                    {
                        if (Cursor.Position.Y > -1)
                        {
                            Cursor.Position = new Point(Cursor.Position.X, Cursor.Position.Y - 1);
                        }
                    }
                }
                if (e.KeyCode == Keys.Down)
                {
                    if (this.lbl_CutImage.Visible)
                    {
                        if (e.Shift)
                        {
                            if (this.cutImageRect.Bottom < this.Height + 1)
                            {
                                this.cutImageRect.Height += 1;
                                Cursor.Position = new Point(Cursor.Position.X, Cursor.Position.Y + 1);
                                UpdateCutInfoLabel(UpdateUIMode.None);
                            }
                        }
                        else
                        {
                            if (this.cutImageRect.Bottom < this.Height + 1)
                            {
                                this.cutImageRect.Y += 1;
                                UpdateCutInfoLabel(UpdateUIMode.None);
                            }
                        }
                    }
                    else
                    {
                        if (Cursor.Position.Y < this.Height + 1)
                        {
                            Cursor.Position = new Point(Cursor.Position.X, Cursor.Position.Y + 1);
                        }
                    }
                }
            }

    处理键盘抬起事件

            /// <summary>
            /// 处理键盘抬起事件
            /// Shift + Enter 開始截图。当松开Shitf键后。
            /// 停止截图区域大小的设置。不然的话鼠标移动还会改变截取区域的大小;
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void Form1_KeyUp(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.ShiftKey)
                {
                    if (this.isCuting)
                    {
                        this.isCuting = false;
                        this.pictureBox_zoom.Hide();
    
                        this.lastMouseMoveTime = 0;
                        UpdateCutInfoLabel(UpdateUIMode.None);
                    }
                }
            }

    用键盘操作截图的功能说明:

    按下截图快捷键(一般是:Ctrl + Shift + A)后,能够移动鼠标到大概的位置。然后就能够通过键盘的上下左右键精确移动鼠标的位置,在精确定位截图的位置后,就能够按下Shift 键再按 Enter键。Shift键不要松开,这时能够按上下左右键改变截图区域的大小。松开Shift键完毕截图区域大小设置。

    这时你能够通过上下左右键以改变截图区域的位置,按Shift不要松开按键,按箭头键来改变拍摄区域的大小。

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    Halcon学习笔记之缺陷检测(二)
    tensorflow常用函数库
    luogu P2765 魔术球问题 (最小路径覆盖)
    luogu P2423 [HEOI2012]朋友圈 (最大团)
    poj 2226 Muddy Fields (二分图)
    匈牙利算法板子
    二分图
    AC日记——【模板】树链剖分 洛谷 P3384
    AC日记——[ZJOI2008]树的统计Count bzoj 1036
    去重排序
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4662770.html
Copyright © 2020-2023  润新知