当在上网时,有些平台右键点击网络资源,什么弹出提示都没有,这是由于屏蔽了鼠标右键菜单所导致的。本实例模拟该功能实现在TextBox控件上屏蔽右键菜单,实例运行结果如图:

技术要点
本实例主要用到自定义类CustomTextBoxGroup。
实现过程
(1)创建一个项目,将其命名为ShieldRightKeyCarte,修改默认窗体为ShieldRightKeyCarte。
(2)主要程序代码。
本程序在加载窗体时,声明一个自定义类CustomTextBoxGroup的对象,并为其指定父容器,然后在当前窗体中添加该控件。代码如下:
System.Windows.Forms.TextBox RightKeyCarte; //声明一个自定义类CustomTextBoxGroup的对象
private void ShieldRightKeyCarte_Load(object sender,EventArgs e)
{
this.RightKeyCarte = new CustomTextBoxGroup(); //实例化该类的对象
this.RightKeyCarte.Parent = this; //设定自定义控件的父容器为当前窗口
this.Controls.Add(this.RightKeyCarte); //在当前窗体中添加自定义控件
}
在自定义类CustomTextBoxGroup的构造函数中,定义控件的位置和大小。代码如下:
public CustomTextBoxGroup()
{
this.Top = 75; //设定自定义控件上边缘与其容器的工作区上边缘之间的距离
this.Left = 115; //设定自定义控件左边缘与其容器的工作区左边缘之间的距离
this.Width = 180; //设定自定义控件的宽度
this.Height = 50; //设定自定义控件的高度
}
重载Windows处理消息的函数WndProc,截获有关粘贴的信息进行屏蔽。代码如下:
protected override void WndProc(ref Message m)
{
const int WM_RBUTTONDOWN = 0x0204; //该变量表示鼠标右键的信息
const int WM_GETTEXT = 0x000d; //该变量表示从文本框中获取文本的信息
const int WM_CONTEXTMENU = 0x007B; //该变量表示右键菜单的信息
//当当前处理的信息为鼠标右键、从文本框中获取文本以及右键菜单信息时
if(m.Msg == WM_RBUTTONDOWN || m.Msg == WM_GETTEXT || m.Msg == WM_CONTEXTMENU)
{
return; //直接返回,不进行处理
}
base.WndProc(ref m); //处理下一条信息
}