欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#實現鼠標消息捕獲

 更新時間:2022年02月26日 10:32:24   作者:.NET開發(fā)菜鳥  
這篇文章介紹了C#實現鼠標消息捕獲的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

在C#中怎樣禁用鼠標按鍵,我們可以通過ImessageFilter接口下的PreFilterMessage方法、Application類的AddMessageFilter方法,RemoveMessageFilter方法和Message結構的Msg屬性來禁用鼠標左鍵。Message結構包裝Windows發(fā)送的消息,可使用該結構包裝消息,并將其分配給窗口過程以進行調度,還可以使用該結構獲取系統(tǒng)向應用程序或控件發(fā)送的關于某個消息的信息。

使用PreFilterMessage方法在調度消息之前將其篩選出來。語法格式如下: 

Bool PreFilterMessage(ref Message m)

參數說明:

  • m:要調度的消息,無法修改此消息。
  • 返回值:如果篩選消息并禁止消息被調度,則為True;如果允許消息繼續(xù)到達下一個篩選器或控件,則為False。使用AddMessageFilter方法添加消息篩選器以便在向目標傳送Windows消息時監(jiān)視這些消息。使RemoveMessageFilter 從應用程序的消息泵移除一個消息篩選器。

示例一:在ComboBox選擇值的時候,選擇的值會隨鼠標滾輪的滑動而改變,有時候不小心滑動了滑輪,導致選擇的值改變,在下面的示例中,通過禁用鼠標滾輪,防止鼠標滾輪的滑動改變ComboBox選擇的值。

界面:

代碼實現:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MouseDemo
{
    public partial class FrmMain : Form,IMessageFilter
    {
        public FrmMain()
        {
            InitializeComponent();
        }

        public bool PreFilterMessage(ref Message m)
        {
            if (m.Msg == 522)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        /// <summary>
        /// 窗體加載
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void FrmMain_Load(object sender, EventArgs e)
        {
            InitComboBox();
        }

        /// <summary>
        /// 初始化ComboBox
        /// </summary>
        private void InitComboBox()
        {
            Dictionary<int, string> dictGrade = new Dictionary<int, string>();
            dictGrade.Add(1, "一年級");
            dictGrade.Add(2, "二年級");
            dictGrade.Add(3, "三年級");
            dictGrade.Add(4, "四年級");
            dictGrade.Add(5, "五年級");
            dictGrade.Add(6, "六年級");

            BindingSource dataSource = new BindingSource();
            dataSource.DataSource = dictGrade;
            cmb_Grade.DataSource = dataSource;
            cmb_Grade.DisplayMember = "Value";
            cmb_Grade.ValueMember = "Key";
        }

        /// <summary>
        /// 索引改變事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void cmb_Grade_SelectedIndexChanged(object sender, EventArgs e)
        {
              //添加消息過濾
            Application.AddMessageFilter(this);
        }


    }
}

示例二:窗體設置右鍵控件,演示禁用和解除禁用右鍵功能,右鍵菜單只有復制、剪切、粘貼三項

界面:

代碼:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MouseRightDemo
{
    public partial class FrmMouseRight : Form   ,IMessageFilter
    {
        public FrmMouseRight()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 實現方法
        /// </summary>
        /// <param name="m"></param>
        /// <returns></returns>
        public bool PreFilterMessage(ref Message m)
        {
            //不響應鼠標右鍵
            if (m.Msg >= 516 && m.Msg <= 517)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        /// <summary>
        /// 禁用鼠標右鍵
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
               //添加消息
            Application.AddMessageFilter(this);
            MessageBox.Show("鼠標右鍵已被禁止使用", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        /// <summary>
        /// 解決禁用鼠標右鍵
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
                //移除消息
            Application.RemoveMessageFilter(this);
            MessageBox.Show("鼠標右鍵已被解除禁止使用,可以使用鼠標右鍵", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }
}

鼠標動作常見參數:

鼠標移動:512

鼠標左鍵:

down:513 up:514

double click:515

鼠標右鍵:

down:516 up:517

鼠標滾輪:522

到此這篇關于C#實現鼠標消息捕獲的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • C#設計模式之建造者模式生成器模式示例詳解

    C#設計模式之建造者模式生成器模式示例詳解

    這篇文章主要為大家介紹了C#設計模式之建造者模式生成器模式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • C# 使用SharpZipLib生成壓縮包的實例代碼

    C# 使用SharpZipLib生成壓縮包的實例代碼

    SharpZipLib是一個C#的類庫,主要用來解壓縮Zip,GZip,BZip2,Tar等格式,是以托管程序集的方式實現,可以方便的應用于其他的項目之中。本文通過一個實例代碼給大家介紹了C# 使用SharpZipLib生成壓縮包的方法,感興趣的朋友跟隨小編一起看看吧
    2018-09-09
  • C#中SQL參數傳入空值報錯解決方案

    C#中SQL參數傳入空值報錯解決方案

    這篇文章主要介紹了C#中SQL參數傳入空值報錯解決方案,需要的朋友可以參考下
    2017-06-06
  • C#生成DLL文件的方法

    C#生成DLL文件的方法

    這篇文章主要介紹了C#生成DLL文件的方法,較為詳細的分析了使用C#生成DLL文件所涉及的相關技巧與實現方法,需要的朋友可以參考下
    2015-07-07
  • c#基于NVelocity實現代碼生成

    c#基于NVelocity實現代碼生成

    這篇文章主要介紹了c#基于NVelocity實現代碼生成的方法,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2021-01-01
  • C#更新SQLServer中TimeStamp字段(時間戳)的方法

    C#更新SQLServer中TimeStamp字段(時間戳)的方法

    這篇文章主要介紹了C#更新SQLServer中TimeStamp字段(時間戳)的方法,涉及C#操作數據庫字段的相關技巧,需要的朋友可以參考下
    2015-05-05
  • C# 參考之訪問關鍵字:base、this

    C# 參考之訪問關鍵字:base、this

    由于靜態(tài)成員函數存在于類一級,并且不是對象的一部分,因此沒有 this 指針。在靜態(tài)方法中引用 this 是錯誤的。 索引器允許類或結構的實例按照與數組相同的方式進行索引。索引器類似于屬性,不同之處在于它們的訪問器采用參數。
    2008-03-03
  • C#調用OpenCV開發(fā)簡易版美圖工具【推薦】

    C#調用OpenCV開發(fā)簡易版美圖工具【推薦】

    本文主要介紹在WPF項目中使用OpenCVSharp3-AnyCPU開源類庫處理圖片,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友參考下吧
    2019-10-10
  • C#實現語音播報功能

    C#實現語音播報功能

    這篇文章主要為大家詳細介紹了C#實現語音播報功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 下載軟件后使用c#獲取文件的md5碼示例

    下載軟件后使用c#獲取文件的md5碼示例

    這篇文章主要介紹了下載軟件后使用c#獲取文件的md5碼示例,需要的朋友可以參考下
    2014-05-05

最新評論