上一篇:C#软件开发实例.私人订制自己的屏幕截图工具(七)添加放大镜的功能
虽然添加了放大镜的功能,但是在进行像素级的定位时,还是不容易精确定位,在用鼠标操作时要改变一两个像素的位置还是有些困难的。
处理键盘按下事件
/// <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#软件开发实例.私人订制自己的屏幕截图工具(四)基本截图功能实现,文章链接:http://blog.csdn.net/testcs_dn/article/details/23346683
此代码对应于博客文章:C#软件开发实例.私人订制自己的屏幕截图工具(六)添加配置管理功能,文章链接:http://blog.csdn.net/testcs_dn/article/details/24466763
在C#软件开发中,创建一个自定义的屏幕截图工具是一项常见的任务,它涉及到图形用户界面(GUI)的交互和图像处理技术。本实例重点讨论的是如何在这样的工具中使用自定义的光标文件,以提供更加个性化的用户体验。...
【ArcGIS Engine + C# 实例开发教程】是面向ArcGIS Engine初学者的一份详细教程,旨在帮助读者理解和掌握基于C#语言使用Visual Studio 2005开发GIS桌面应用程序的技术。教程的目标是使读者能够深入理解ArcGIS Engine...
C#精彩实例教程.pd 很好一本入门教程
ArcGIS+Engine+C#实例开发教程.pdf
《C# WinForm实例解析——200个经典...通过深入学习这200个经典实例,你将能够全面掌握C# WinForm开发,提升自己的编程技巧,为日后的项目开发打下坚实基础。每一个源码都是一个宝贵的教育资源,值得反复研读和实践。
在本文中,我们将深入探讨如何使用C#编程语言实现屏幕截屏功能。...这个功能在许多应用程序中都有广泛的应用,例如屏幕录制、桌面辅助工具或者游戏截图软件。希望这个解释能帮助你理解和实现C#中的屏幕截屏。
c# 模拟 屏幕键盘c# 模拟 屏幕键盘c# 模拟 屏幕键盘c# 模拟 屏幕键盘c# 模拟 屏幕键盘c# 模拟 屏幕键盘c# 模拟 屏幕键盘c# 模拟 屏幕键盘c# 模拟 屏幕键盘c# 模拟 屏幕键盘c# 模拟 屏幕键盘c# 模拟 屏幕键盘c# 模拟 ...
C#作为.NET Framework的主要开发语言,提供了丰富的API和类库,使得开发截屏工具变得相对简单。我们将从以下几个方面进行讨论: 1. **WinForms基础知识**:在C#中,我们可以使用WinForms库来创建桌面应用程序,它...
在IT领域,尤其是在软件开发中,日志记录是一项至关重要的任务。它可以帮助开发者跟踪和调试应用程序,记录用户行为,以及确保系统的稳定运行。本实例聚焦于C#编程语言中的键盘日志记录,这是一种用于捕获并存储用户...
基于C#的软件开发实例,可供程序人员参考
《ArcGIS Engine+C#实例开发教程》是一份深入讲解如何使用ArcGIS Engine结合C#进行地理信息系统(GIS)开发的详细教程。ArcGIS Engine是Esri公司提供的一个强大的开发工具,它允许开发者创建桌面、移动和Web应用程序...
C#是一种功能强大的面向对象的编程语言,广泛应用于开发Windows桌面应用程序、Web应用程序以及游戏等。创建一个通讯录实例是学习C#基础知识和面向对象编程的绝佳实践。 1. **基础概念** - **类(Class)**:在C#中...
最后,如果虚拟键盘需要支持特殊功能,如复制、粘贴、撤销和重做,那么还需要掌握这些操作的实现原理,以及C#中如何调用系统剪贴板API进行数据交换。 在压缩包内的“虚拟键盘”文件中,你应该能找到实现以上功能的...
C# 网络通信开发训练-32个实例 C# 网络通信开发训练 实例01 更改计算机名称...... 670 实例02 通过计算机名获取IP地址...... 672 实例03 通过IP地址获取主机名称...... 673 实例04 修改本机IP地址...... 674...
"贪吃蛇游戏"是一个经典的计算机游戏,它的实现涉及到了C#中的图形界面编程、键盘输入处理、数组操作、游戏逻辑等。这个实例对于学习游戏开发基础和提高逻辑思维能力十分有益。 "五子棋程序"则展示了如何在C#中实现...
在本文中,我们将深入探讨如何使用C# Winform框架实现区域截屏功能。C#是一种广泛使用的编程语言,尤其在Windows应用开发中,Winform是一个强大的工具,它提供了丰富的控件和API,使得创建交互式桌面应用程序变得...
在C#软件开发领域,这三个实例——房屋出租管理系统、仓库管理信息系统和理财管理信息系统,都是典型的企业级应用案例,对于初学者来说是非常有价值的实践项目。这些实例覆盖了基础的数据库操作、用户界面设计以及...