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

屏蔽文本框的右键菜单-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下通过。

VB中的时间处理问题 Windows操作平台下CGI的实现 -VB资料 按下某组键(HotKey)便执行某程式-VB资料 把所有的字体名称放到 ComboBox -VB资料 把文件置入到Text或RichText中-VB资料 捕捉 MouseExit 事件 -VB资料 操作过程动态显示 -VB资料 查找月份的最后一天-VB资料 程序启动时,如何自动判断 MDB文件是否损坏并自动修复?-VB资料 读取和修改Windows注册表 -VB资料 对VB的IDE环境的扩展 防止文本控件中的部分滚动-VB资料 关闭正在运行的程序 -VB资料 关机消息的拦截 -VB资料 VB获得、设置鼠标双击间隔时间 VB获取当前系统平台 记载Windows使用的时间-VB资料 加速Visual Basic For Application(VBA) 监视程序的运行情况 -VB资料 交换鼠标按钮 -VB资料 交换鼠标左右键 -VB资料 禁止使用 Alt-Tab 或 Ctrl-Alt-Del -VB资料 控制光驱门的开关 -VB资料 VB利用 窗口函数监视系统的运行情况(VB类) VB判断是否在VB5环境下运行 VB判断一个32位程序是否结束 VB判断一个程序启动完成(不是结束) 屏蔽TextBox的系统菜单 -VB资料 启动时禁止装入 Add-Ins -VB资料 让Timer控件每5分钟触发一次事件 -VB资料 让程序启动快一点 -VB资料 求助!关于用74LS181模拟8位机的资料!(散分啦,小弟急用啊!) 我的WINDOWS2003的DIRECTX 3D功能用不了,为什么? 如何用命令来修改设置计算机的ip,网关和dns等内容 不知道到那里问,借个人气了 托架的图标 散分! 如何建立一个这样的数据窗口? 上次未解决的问题(附源程序,及时结贴)(输入地址时http://ip/default.asp能正常使用,但是用http://ip则只能显示首页) 这个分页查询的SQL语句有什么问题?高分求教!!! 怎样求一个集合的子集? 我应该怎么做(项目经理请进,至少代表全国大部分公司的问题),一个年轻软件开发人员的问题 zzzzzzzzzzzzzzzzzzzz 高手指点迷津,如何更新数据库里的image字段 算法问题,再请教各位高手! 急急急,有关classpath 急!如何把picturebox中的内容保存成图片呢! Web Service中怎样验证身份? Web Service性能测试,欢迎评论,来者有分! 散分! 数据类型转换 ColdFusion的语言 - CFML win2003安装后,每个一秒种读一次盘是否正常 各位高手,最近在使用MASK PRO插件时碰到一个问题 x86汇编新手 星期六了,我还在工作....大家来帮忙看看。....很简单的问题 怎样在注册表里删除OFFICE 数据库不同,sql语句也有限制吗? 我在使用化境上传组件时碰到的问题,希望大家帮着看看,解决一下,高分求助 listview中的item能否变灰,也就是使某些项不能选 高分求各位高手急求!!!MP3问题 我的2k(PRO)我的电脑打不开,控制面版也打不开,其余的一切正常。这是为什么? 配置问题 关于上网,上传,二个大问题,高手请进,急! 一个打包问题 如何在asp里实现点一个按钮带动另一个软件的运行?急! 散分! 怎样将http下做好的网站,全盘转为https的.我准备买密匙的.想先测试一下. 如果判断当前时间是在某一时间段内? TX DATA SOURCES 數據源問題? 数据得导入和导出 给个好办法 反驳!“一位女生对男生追心仪女孩的建议”zz 请高手指点出我的小程序错误,谢谢! 菜鸟问题,这个combobox为什么不响应onchange事件?高手看看啊 高分求助 (100分) :求学生的平均分,并且排序输出成绩册!!!! 急!请问如何使用java语言获取mysql数据库的相关信息 编译4次便能成功! 下载UNIX 散分! Jsp函数中如何使用JavaScript中定义的函数? 无题! 用一支蜡烛作太阳,用一只小地球仪从西向东绕蜡烛运转,请填出相应的节气.1 ( ) 2 ( ) 3 ( ) 4 ( ) 考西语三级翻译证书需要具备什么水平 拜托看下几道不明白的化学题就告诉我吧我先感谢各位了9g 在物理模型中玻璃是不是光滑面是不是就没有摩擦力 也就没有μ 这图的等效电路图怎么画? 补充词语:晶()明撤? 玻璃很光滑,为什么玻璃上不能滑冰? 这个图的等效电路图要怎么画 我主要想知道画等效电路图的方法 地球的地心引力存在与金星吗? 玻璃泡碰到容器的底和容器壁,玻璃泡为什么会损坏?拜托各位大神初二物理题 这个电路等效图怎么画?说明为什么. 铅锑合金的性能? 我的一个插座,一个三孔的,一个二孔的,二孔的有电,三孔的无电,不知为什么? 电机相与相之间的阻值不一样是不是证明电机已经烧了?万用表测量是65,65,25 梭伦改革中,按财产多寡划分社会等级,此举打击最大的是( )、梭伦改革中,按财产多寡划分社会等级,此举打击最大的是( )A.奴隶主阶级 B.氏族贵族 C.雅典公民 D.雅典外邦人为何不是A? 请各位考过西班牙语DELE的前辈指点一下,我这个测试结果是不是要报考B2级呢? 更换烟灰缸时是将烟灰缸口对口还是底对口 英语翻译要求:按词(或词组)翻译词义,并说明该词(或词组)在短语中的词性和语法成分. 断路器CM1L-225/4300 VDFB1-63/2P-C63 VDFB2LE/32/1P+N/C16 以及其下的In Id Td的各种字母含义解释其他常用住宅断路器的解释也需要 设计新手 求助几道不明白的化学题说出来吧,感谢各位9c 材料一梭伦改革中这项重要措施的划分等级的标准是什么 西班牙语DELE B1水平,求初级翻译兼职工作,有介绍的翻译公司吗? 大家告诉我下几道不明白的化学题说出来吧,感谢各位6c 英语翻译秦氏嘉庆本注:不可善,谓钩箝之辞所不能动,如此者必先命征召之.重累者,谓其人既至,然后状其材术所有,知其所能,人或因此从化也.房立中本译:对于那些以钩钳之术仍没法控制的 地心引力的反作用力是什么?还是没有发现? 谢谢你们了2H 英语中“烟灰缸”有没有什么引申或比喻的意思? PPARα的靶标基因是什么 在括号里填上表示看的词语,什么什么远房什么什么星空?什么什么节目什么什么一眼 他喜欢抽烟,想要在生日时收到烟灰缸.(英语) 求大神解答PPAR-r +/-这个是什么意思啊,是不是这个基因缺失?这文章里有PPAR-r +/-和PPAR-r +/+两种. 我作业有一题不懂,就是用“眼”组词,眼什么什么,如:有眼无珠、近在眼前. 幼讷于言,不补充. 电解液是什么 硫和氧气发生反应生成 幼讷于言,人未之奇.的意思 蒸馏水擦脸对皮肤有好处吗? 氧气和硫反应生成一种___的____体. 幼讷于言,人未之奇的意思 蒸馏水喷脸上有什么做用 与氧反应生成硫的物质 “幼讷于言,人未之奇”是什么意思?_ 请问导电泡棉的性能优点有哪些? 直流24V转5V,用LM109,怎么样?有谁用过? 蔬菜类如何抽样,根据什么抽样的.各种蔬菜如何判定质量的好坏,什么可接收,什么不能接收 9.用标记有15^N的一条双链DNA分子,在标记有14^N的培养液中进行两次复制,其后代的DNA分子单链中,含14^N和15^N的比值为?A1:1 B2:1 C3:1 D4:1 美国为什么不准巴勒斯坦建国 MELODY的中文意思 用转化的策略解决问题求阴影部分面积 美国为什么要阻止巴勒斯坦入联? 物质____决定物质的_____,物质_____也决定物质的用途. 某收音机可变电容器的电容量为C1时无线电波波长是入1,当为C2时,对应的波长为入2,若把电容器调为C1+C2,则能收到电磁波的波长为?我知道正确答案咋写,我只是想问为啥不能这样写:入1/入2=T1/T 若一个中学生的质量为40千克,求它的体积? 物质的用途由什么来决定? “转化”是解决数学问题的一种策略,先将下图中阴影部分进行转化,再算出它的面积.(四个圆的半径都是0.) 氧与硫反应生成带有什么的气体 人的体内为什么会有静电?拜托了各位 谢谢人体怎么会有静电,这是怎么回事? 哪里的导电泡棉最好啊? 用转化的解决问题的策略求阴影部分的面积 拜托看下几道不明白的化学题在线等了,感谢各位4c 欧债危机对欧盟的重新排序全球最大海上书店抵达巴林中俄舞台艺术对话举办美最大银行被罚130亿美元“北京中轴线”展在开罗举办奥巴马称对特工可能监听默克尔电话之事壮汉翻拍性感照做广告 翘臀又嘟嘴(高窃听默克尔,奥巴马早就知情?监听亚太,美曾想“借道”日本光缆美动物园老虎“抢南瓜”迎万圣节(高清周边外交需要邻国间更深入地相互理解意大利女画家作品武汉展出 观众:口味中国顶尖富豪财富激增 168人 净资监听亚太,美曾想“借道”日本光缆美媒:监听活动曝光迫使美停止炒作“中因假牙飞出车外请假 美雇主为员工缺勤美最大银行被罚130亿美元印火星探测器欲争亚洲第一欧债危机对欧盟的重新排序全球最大海上书店抵达巴林中俄舞台艺术对话举办五一长沙实物黄金销售下降近四成砍伐城市树木、临时占地,区里可审批学习鉴别药材操守比技艺更重要长沙:餐馆将油烟排入下水道致楼上住户长沙无证托管中心“脱管” 幼童遭体罚将调研再考虑是否调整绿灯时间6月 23日起,湖南直飞欧洲凯迪拉克CTS登陆长沙湖南摄影家陈利登顶世界摄影大赛乌克兰军队扩大东部打击行动你的一脚油门可能制造一场“暴雨”信息透明可助推无偿献血事业大运重卡推出“终身质保”服务我们献的血去哪儿了祁阳县清退学生伙食费177.8万元摄影大师阮义忠:替未来留下传统价值的[超薄快读]孩子吃剩饭、遭体罚,托管机构成“脱管我献的血去哪儿了?市民致信长沙血液中[文体快餐]一场不一样的婚礼 “塔克拉玛干的婚
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘