说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

屏蔽文本框的右键菜单-VB资料

HTML文档下载 WORD文档下载 PDF文档下载
屏蔽文本框的右键菜单-VB资料

屏蔽文本框默认的右键菜单——浅谈如何控制Windows消息

屏蔽文本框的右键菜单,曾经看到一个程序是这样做的:

Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Text1.Enabled = False
Text1.Enabled = True
PopupMenu yourmenu
End Sub

这当然是个简单的实现方法,但作为一个以api为主题的网站,我在此想介绍一种用api函数来实现的方法,并想谈的深入一些。
首先,谈谈消息和窗口函数。在Windows里,消息有两方面的用途:首先,它们由Windows传给窗口函数,指出发生了一个特定的事件。比如用户单击了鼠标,或者按下了键盘上的某个键。消息也可由Windows用于通告发生了一个内部事件,比如输入焦点的变更。另外,可将消息作为Windows的一种命令使用。这种命令用于通知一个窗口执行特定的任务。其次,通常可将消息传给一个控件或窗口,请求它执行特定的操作。而每个窗口都有一个窗口函数,它的作用是对消息进行处理。该函数就象一个特殊的VB程序,其中包含了对事件进行处理的代码。
对于右击文本框,首先是产生一条 WM_CONTEXTMENU 消息,该消息被文本框的窗口函数接收,就会弹出默认的菜单。所以,我的思路是:接收所有的文本框消息,如果消息为 WM_CONTEXTMENU ,那么弹出自定义菜单,否则,把消息传递给默认的窗口函数由它处理。
如何接收消息?一个方法是,用 AddressOf 关键字,它可以把一个自定义模块的地址变为窗口函数的地址。这样,窗口函数就成了你的自定义模块了。而消息仍然传递到原先窗口函数的地址(这时,这个地址指向的窗口函数已经是你的自定义模块)

现在就看看是如何实现的吧。首先建议你看看VB联机手册关于 AddressOf 的帮助。程序需要一个窗体、窗体中有一个文本框,以及一个标准模块。

标准模块的代码:

Option Explicit

Public OldWindowProc As Long
' 保存默认的窗口函数的地址
Public Const WM_CONTEXTMENU = &H7B
' 当右击文本框时,产生这条消息

Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long


Public Function SubClass1_WndMessage(ByVal hWnd As OLE_HANDLE, ByVal Msg As OLE_HANDLE, ByVal wp As OLE_HANDLE, ByVal lp As Long) As Long
If Msg <> WM_CONTEXTMENU Then
SubClass1_WndMessage = CallWindowProc(OldWindowProc, hWnd, Msg, wp, lp)
' 如果消息不是WM_CONTEXTMENU,就调用默认的窗口函数处理
Exit Function
End If
SubClass1_WndMessage = True
End Function

窗体的代码:

Option Explicit

Private Const GWL_WNDPROC = (-4)

Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then Exit Sub
OldWindowProc = GetWindowLong(Text1.hWnd, GWL_WNDPROC)
' 取得窗口函数的地址
Call SetWindowLong(Text1.hWnd, GWL_WNDPROC, AddressOf SubClass1_WndMessage)
' 用SubClass1_WndMessage代替窗口函数处理消息
End Sub

Private Sub Text1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then Exit Sub
Call SetWindowLong(Text1.hWnd, GWL_WNDPROC, OldWindowProc)
' 恢复窗口的默认函数
PopupMenu usermenu
' 弹出自定义菜单
End Sub

运行这个程序,右键菜单已被自定义菜单取代,不会出现两个菜单的情况。关于这个程序,你可以在例程中下载它,实现的功能比这里的要完整。最后要说明的是,尽量不要使用 AddressOf 来改变一个窗口的默认窗口函数,它可能引起不可预料的后果。在VB的联机手册里也是这样建议的,我在编这个程序时,死过几次机,其中一次,搞的我的Windows的“开始”菜单没有反应。

在Windows 98 + VB5.0下通过。

2013年10个科技预测 三维打印技术将成主流 能省电99.96%:微软开发基于云的GPS技术 十个最有用的云数据库 开源产品系列:企业级Web框架web2py 让针对Webkit优化的网站兼容WP8 IE10 CMDN Club 24期:互联网产品的演进之路——从QQ谈互联网14年进化史 360安全浏览器发布“照妖镜”和“网站名片”功能 Windows Server 2012实用教程:添加Hyper-V管理器 为何Google弃置GCE和GAE选择AWS? 2012移动应用盘点:乱象丛生 最佳与奇葩共舞 从1976至2013大事记,看Android未来命运 c#经典入门视频001基础知识-苏坤老师主讲 c#经典入门视频002学习两句话-苏坤老师主讲 c#经典入门视频003基础知识-苏坤老师主讲 回顾HTML5这一年:在痛并快乐中前进 学Apple,微软宣布2013上半年零售店建设计划 真羡慕他们:谷歌宣布Gmail电话明年继续免费 c#经典入门视频004变量-苏坤老师主讲 c#经典入门视频005变量的使用和命名规则-苏坤老师主讲 c#经典入门视频006输出变量的值(及赋值符、连接符、占位符)-苏坤老师主讲 c#经典入门视频007变量交换_输入-苏坤老师主讲 回首JavaScript这一年:笑里藏刀 百媚丛生 平板优先:Supercell游戏公司日收入100万美元 Mootools实现具有排版功能的页面拖拽 2012:云计算的春天 直击Strata+Hadoop World:百万雄师过大江 能携带的网络 Anyfi 150万建网络虚拟热点 又将颠覆产业?传苹果正开发蓝牙智能手表 JavaScript社区开发者调查结果 欢乐淘、求PS大神获腾讯开放平台应用创新大赛年度金奖 2012是响应式设计之年 ASP中用ADO连接SQL Server2000的连接字符串怎么写? 在画布上怎么实现滚动条 急~~~如何从文件中取值赋给动态数组?~~~~在线等待 到哪里能够下载 BCB6 Update 请问关于REDHAT下关于安装MYSQL 的问题 请问关于REDHAT下关于安装MYSQL 的问题 CreateFolder("name") 问题 name是变量怎么办???? 急!!! 如何做像 http://www.my0807.com/1.gif 的文字。。 请教真正的高手。 如何用TURBOC 2.0编程检测WINDOWS是否已在运行中? VS.NET能专Windows98中安装吗? 如何创建一个imagelist,用CImageList,可以记录24位色的位图 这个关于树的问题我越想越想不通,请手指点指点:) 用winsock控件设置client/server程序时,server端应怎样设置,请各位大虾帮帮小弟!!谢了! 从MIDI文件转换成简谱的问题? 请问谁有高招??????? SOS ,谁能帮帮我? 如何在一个程序中得知另一个指定的程序是否运行? 很急!!请教高手,这样的思路是否正确?(数据库方面)内有非常详细的说明,谢谢!! 我是处学者 这个关于树的问题我越想越想不通,请手指点指点:) 50小分征集C++的类和VBS的类的区别? hg0001(CoolFish) ,分已给!请发给我! 电脑上的时钟在关机之后就停止走动,下次开机时仍是上次的时间,是怎么回事?请教大家! 如何使用 WRITEFILE 函数将二进制数据写入文件? 我装的是XP,JDK1.3,无法编译程序 电脑上的时钟在关机之后就停止走动,下次开机时仍是上次的时间,是怎么回事?请教大家! 如下的演示光盘要实现的功能用什么软件开发比较好一个新手完成要多长时间? windows如何实现禁用状态文字? 输入不回显 你没有权限删除贴子!!!奇怪 Tc 那为用的是win XP,请进! 我输入的PYTHON怎么编译不出来? 问一个很弱的问题 为什么我的工具栏成了这个样子 哪里有讲MFC的书,Linux下GCC的书? 到底是什么问题啊?昏~~~(一定给分) 若干问题,请解惑。。。。。。 我这里的局域网是用win2000+sygate共享上网的,如何设置才能禁止局域网中其他计算机上OICQ或聊天室之类的网站? 如何遍历select下拉菜单中的内容,并显示在另一个select菜单中? 如何编写文档? 同样的程序连接SQLServer为什么比Access慢了几十倍 sybase12.5 odbc 中文问题 谢谢吃素的狼,但好象没用(FOXBASE问题) 同样的程序连接SQLServer为什么比Access慢了几十倍 htm和html 有什么不同,哪一个好一些,cfm是什么类型的文件? 请问怎么写mciSendString的play,close,open等的参数?如果是想打开wav文件的话。。。 回复数老是不对 谁能给我发一个类似windows资源管理器的例子!及拥有treeview和listview的sdi! delphi的query为什么不能查询nvarchar和ntext的sqlserver数据 拼音yuan是由"y" "v" "an" 拼出还是由"y" "van"拼出? 四年级作文桥400个字 一个长方形改变形状平行四边形,周长(),面积() yuan的拼音分解开应该是y-u-an还是y-v-an 在3A+B=2C+D中已知30gA和10gB恰好完全反应,生成5gD,已知C的相对分子质量为70.求A的相对分子质量不要用摩尔来解. 我需要课文《飞夺泸定桥》的课文原文,请粘贴到这里. Have you got _____one yuan coin?填a还是an 已知反应3A+2B=2C+D,A、B两种物质完全反应时质量比为3:4,若生成C和D共140克,则该反应消耗B的质量为多少? 要全文!10分钟内拿来1 近似数是4.85的最小三位小数是什么 课文飞夺泸定桥 成语语文五年级11课飞夺泸定桥中所有的成语、其意思. ABCDE乘E等于EEEEEE,那么ABCDE分别代表什么?各位我在百度上找了.所以别找了,没有! 带yuan字读音的成语有哪些?yuan字读音要在最后一个字? 一台车床加工20个零件用一个小时 这样计算 加工8个零件要多少分钟一台车床加工20个零件用一个小时 这样计算 加工8个零件要多少分钟(用比例解) 拼音怎么读?要音调的 ( )地(读音:yuan) ( )认(读音:cheng) 飞夺泸定桥 课文 描写飞夺泸定桥的作文 中国姓氏中发音yuan的有什么?急用! 一台机床4小时加工了20个机器零件.照这样计算,再加工70个零件,共用多长时间?不用方程 《飞夺泸定桥》的写作目的是什么? YUAN为什么是整体读音我搞不懂YUAN为什么会是整体读音,如果YUAN是整体读音,那应该怎样拼读?都YAN的音吗?那还要那个U来干什么用呢?比如:演员两个字就应该读y-u-an yan才对的,难道是yan yan?类似 飞夺泸定桥找泸定桥的简介 ABB*C=DBBC推算出数字 拼音yuan,是整体认读音还是三拼音节? 汽车后的英文字母代表什么意思 如呆ABB*C+=DBBc那么A=()B=()c=()D=() 把一个平行四边形割补成一个长方形后,面积不变,周长( 请详细说明为什么 已知二次函数f(x)=a(x-0.5)²+25,且方程f(x)=0两根的立方和等于19,求这个二次函数的解析式. 用某台机床加工一批机器零件,每小时加工的数量和所需的加工时间的关系如下表每小时加工的数量15 20 25 30 40 60加工时间80 60 48 40 30 20从表上可以看出,( ) 和 ( ) 是两种相关联的量,因为 一个平行四边形拉成一个长方形(周长不变),他的面积是比原来小还是大还是相等? 无形的桥400字作文 从机床每小时加工零件的个数,加工的时间和零件总数这三个量中,你能找出那几种比例关系? 免疫组化具体过程及细胞爬片 关于桥的想象作文400字~350字 英语以下字母所代表的含义:1.UK 2.USA 3.SARS 4.NBA 5.PLA 6.PRC 7.PC 8.HK 9.VOA 10.IOC 11.KFC 12.AIDS 13.FIFA 14.DNA 15.IQ 16.PE 17.VIP 18.DDD 19.IT 20.RMB 21.EMS 22.ID 23.CCP 24.WTO 25.MTV 26.CAAC 27.P 请依次回答,写出题号, 把一个平行四边形割补成一个长方形面积不变周长怎么样.还有一道;一个三角形的底是20分米高是1米它的面积是 yuan属于三拼音节还是属于整体认读音节 拼音怎么标声调?我有些忘了 在免疫组化SABC法中,DAB显色是做什么用的?为什么用?原理是什么?DAB试剂盒是做什么用的?我是初学者,可能问题有点白痴,谢谢大家了 整体认读音节yuan是三拼音节吗 拼音标声调方法 免疫组化步骤设计我初次做免疫组化,过程不太熟悉,请问谁可以给我说下具体的步骤?我的实验是检测小鼠胰岛素,一抗是兔抗小鼠抗体,二抗是荧光标记的羊抗兔抗体, yuan是整体认读音节吗我感觉 yuan 好像不是整体认读音节吧,你看:y u an 可是为什么是整体认读音节呢? 怎么标拼音声调? 谁能帮我详细介绍一个免疫荧光免疫组化的原理还有几本过程? yuan是整体认读音节,那它也是三拼音节吗 拼音的声调符号是怎么标上去的? 为什么要做免疫组化检查,免疫组化用于检查 yuan是整体认读音节吗?是三拼音节吗? 将一个平行四边形拉成一个长方形,它的周长和面积发生了什么变化? 写桥的作文四年级 quan和yuan是三拼音节吗? 概括飞夺泸定桥的主要内容. 四年级写桥的作文 有什么英文名的发音跟汉语拼音的Liu yuan yuan 相近. 汉语拼音的声调怎么读与对应的怎么写 把一个长方形拉成一个平行四边形.这时面积和周长都变了吗? yuan是三拼音节吗 电子的子字汉语拼音读哪种声调
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘