C#開發執行個體-訂製螢幕剪取工具(八)添加鍵盤操作截圖功能程式碼範例

來源:互聯網
上載者:User

雖然添加了放大鏡的功能,但是在進行像素級的定位時,還是不容易精確定位,在用滑鼠操作時要改變一兩個像素的位置還是有些困難的。

處理鍵盤按下事件

        /// <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鍵不要鬆開,再按上下左右鍵可以改變地區的大小。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.