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不要松开按键,按箭头键来改变拍摄区域的大小。

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

上一篇:webform添加到webapi的支持


下一篇:基于Wiki的知识共享平台模型架构