돋보기 기능이 추가되었음에도 불구하고 여전히 픽셀 단위로 정확한 위치 지정이 쉽지 않습니다. 1~2픽셀은 아직 좀 어렵네요.
/// <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# 개발예 - 맞춤형 스크린샷 도구 (8) 키보드 조작 스크린샷 기능 추가 코드 예제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!