日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

C#實(shí)現(xiàn)鼠標(biāo)消息捕獲_C#教程

作者:.NET開發(fā)菜鳥 ? 更新時(shí)間: 2022-04-30 編程語言

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

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

Bool PreFilterMessage(ref Message m)

參數(shù)說明:

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

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

界面:

代碼實(shí)現(xiàn):

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;
            }
        }

        /// 
        /// 窗體加載
        /// 
        /// 
        /// 
        private void FrmMain_Load(object sender, EventArgs e)
        {
            InitComboBox();
        }

        /// 
        /// 初始化ComboBox
        /// 
        private void InitComboBox()
        {
            Dictionary dictGrade = new Dictionary();
            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";
        }

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


    }
}

示例二:窗體設(shè)置右鍵控件,演示禁用和解除禁用右鍵功能,右鍵菜單只有復(fù)制、剪切、粘貼三項(xiàng)

界面:

代碼:

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();
        }

        /// 
        /// 實(shí)現(xiàn)方法
        /// 
        /// 
        /// 
        public bool PreFilterMessage(ref Message m)
        {
            //不響應(yīng)鼠標(biāo)右鍵
            if (m.Msg >= 516 && m.Msg <= 517)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

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

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

鼠標(biāo)動作常見參數(shù):

鼠標(biāo)移動:512

鼠標(biāo)左鍵:

down:513 up:514

double click:515

鼠標(biāo)右鍵:

down:516 up:517

鼠標(biāo)滾輪:522

原文鏈接:https://www.cnblogs.com/dotnet261010/p/6691332.html

欄目分類
最近更新