• 技术文章 >后端开发 >C#.Net教程

    C#开发实例-订制屏幕截图工具(八)添加键盘操作截图功能代码示例

    黄舟黄舟2017-03-14 13:38:21原创1089

    虽然添加了放大镜的功能,但是在进行像素级的定位时,还是不容易精确定位,在用鼠标操作时要改变一两个像素的位置还是有些困难的。

    处理键盘按下事件

            /// <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键不要松开,再按上下左右键可以改变截图区域的大小。

    以上就是C#开发实例-订制屏幕截图工具(八)添加键盘操作截图功能代码示例的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:C#开发实例-订制屏幕截图工具(七)添加放大镜功能的代码示例 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • c语言中源文件编译后生成什么文件• C#中GDI+编程10个基本技巧二• 应用绝对路径与相对路径• ASP.NET使用Ajax如何返回Json对象的方法具体介绍• 解决asp.net中“从客户端中检测到有潜在危险的Request.Form值”的错误
    1/1

    PHP中文网