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

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

one(type,data,fn)-JQuery API ready(fn)-JQuery API resize(fn)-JQuery API scroll(fn)-JQuery API select(fn)-JQuery API select()-JQuery API submit(fn)-JQuery API submit()-JQuery API toggle(even,odd)-JQuery API trigger(type)-JQuery API unbind(type,fn)-JQuery API unload(fn)-JQuery API Effects特效-JQuery API animate-JQuery API fadeIn(speed, callback)-JQuery API fadeOut(speed,callback)-JQuery API fadeTo(speed,opacity,callback)-JQuery API hide(speed,callback)-JQuery API hide()-JQuery API show(speed,callback)-JQuery API show()-JQuery API slideDown(speed,callback)-JQuery API slideToggle(speed,callback)-JQuery API slideUp(speed, callback)-JQuery API toggle()-JQuery API Javascript-JQuery API $.browser-JQuery API $.each(obj, fn)-JQuery API $.extend(target,prop1,propN)-JQuery API $.grep(array,fn,inv)-JQuery API $.map(array, fn)-JQuery API 没分了,仅此10分求日期的正则表达式,希望帮忙 PPT 文件变得好大 oracle8.1.5中transaction slot的问题 怎样在linux下设置有管理员权限的用户!在线等待!!!! 出学者界面实做---STEP 4 小小的堆栈问题 可不可以在一个视图中加入不同数据库的数据? 为什么我在C++ Builder 中用cgi作webservice访问数据库出错? 求JPAD PRO的破解 PPT 文件里插入Organization Chat 请教static问题 我要离开现在的公司了,去寻求新的发展...... 请教各位高人,一个循环定义问题 Win98下为什么拦截不到从另一线程发过来的自定义消息 public class myclass 与 class myclass 一样吗? dbgrid 中,titleclick事件,如何判断选中的是 哪个字段 呢? 很简单 ADOtable 不支持 FindKey, 请教: 应该如何解决记录定位? 火急请教个“重新验证组织单元”问题! 想做一个报表但设置DataEnvironment的连接失败,不知为何错? 请教!linux下将.h和.c文件编译成动态连接库!!! 你真的懂SQL语句的编写吗?快来,我给你分 重载与模板的问题 出租魏公村西口两居之一 不知哪有好一点的聊天室,各位大虾请推荐几个小弟几个!!!! jsp里面有类似于asp的response.end语法吗? 求教各位大虾,这样的数据库程序如何实现。急切中。。。。。 vb中有没有像CommonDialog选文件的定位文件夹的控件? 怎么一次性加入多个子目录中的CPP文件到VC工程中 关于pos系统数据同步传输,欢迎大家进入讨论! 怎么得到本机的ip地址? 关于package 的问题 关于打开网页的问题 怎么在文本文件中的两行中添加一行?怎么删除一行? “split”分割问题 请教:怎么配置Tomcat可以禁止访问目录 ,比如访问 http://127.0.0.1/test 不会出现文件列表? 请问怎样在对话框窗口中的Edit控件里按下Enter键后不要退出 有关dremveaver ultradev 的动态网页制作问题, 请教高手。。 在delphi中如何实现全屏?? 100分。请大虾帮忙搞定 谁有存储过程的学习资料? 怎样判断计算机上有没有装madc数据库连接,? 项目中的一个问题,急待解决,请帮忙,谢谢 无聊散分 鼠标在图片上移动所发生的事件 一个怪问题:ping得通却NetTerm不上? JBuilder中如何拖动控件到面板,位置放置的问题。(高手指教) 请问在那里有csdn helper 下载 是否可以给表的字段编号? 我想让程序启动该怎么做 这样一个项目计划怎么写? vb.net 附值问题,请教高人 小明原计划每天早晨跑步2千米.某一天,他按每小时2.5千米的速度跑了0.75小时,这天他完成了吗? 观音灵签六甲祈保是什么意思 求80——100字的名著读后感回答得越多越好,希望不要和我写过的重复,求速度!~~~ 两人从A地到B地,哥哥步行,每小时行5千米,先走1小时,弟弟骑车,起了30分钟,两人同时到b地,弟弟每小时行多少千米? 六甲祈保是什么意思 驴子和马、骡子之间是什么关系?为什么!他们之间的繁殖关系是? 求一篇守候话题作文,不要爱情的,比如守候诚信守候善良之类的,800字左右的,急用 六甲第四十二签 六甲第四十二签我二月份的时候求了只求子签不知道是什么意思,签中写的是六甲女孩母生太,男孩只恐母多伤,春秋许愿犹还保,冬了定然有灾殃.有谁知道的就快告诉我吧, 塞翁失马此独以跛之故的\"以\"是什么意思 小华计划每天早晨跑步1千米,他按每小时2.5千米的速度跑了0.75小时,这天他完成跑步计划了吗?请列式 我正在写小说,我需要描写小说里舞会上男生的着装与外貌的片段 塞翁失马古文中:“此独以跛之故”的此的解释 Many people get rainwater from under the ground 成立吗 如何写樱花的作文 塞翁失马中的以跛之故中故的意思是什么 The meeting will be _ by many important people from many countries.A.taken b.joined c experienced d.attended 驴子和马交配怎么可能生骡子?怎么可能,DNA条数对得上吗?染色体的配对这些是否可行? 《塞翁失马》中此独以跛故的故是什么意思? 生物亲代与后代之间既有遗传,又有变异,这是什么现象 快车从甲地开往乙地需要12小时,慢车从乙地开往甲地要16小时,两车相对开出,快车中途停车2小时,相遇时快车行了360千米,慢车速度是多少? 《塞翁失马》中 此独以跛之故 以: 2-4反义词成语大全 甲乙两地相距180千米,快车以40千米一时的速度从甲开往乙,出发30分钟后因机器故障停车修理,这时慢车以30甲乙两地相距180千米,快车以40千米1小时的速度从甲地开往乙地,出发半小时后,因故障 我要怎么办.有人来帮帮我吗?看看我的故事.好迷茫.真的不知道怎么办了.好像有个男生喜欢我,但是我有男朋友.,真的不知道该怎么处理这种关系.我跟我男朋友是异地恋.只谈了一个月 我们就 汽车从甲地开往乙地,第一小时行了全程的四分之一,第二小时行了全程的三分之一,现已超过中点15千米.问全程多少千米? 一辆汽车从甲地开往乙地,第一小时行了全程的五分之一,第二小时行了全程的四分之一,这时距甲地180千米,甲乙两地相距多少千米 惠阳淡水到广州白云区怎么坐车 the,flu,people,in,many,winten,the,get 连词成句 用“刘”字组词,要求只能有两个字,不能是人名,要说出词语的意思或出处.组的词越多越好 樱花作文400字左右,真实 一辆汽车从甲地开往乙地,第一个小时行驶全程的四分之一,第二小时行驶了全程的三分之一这时共行驶了70km.甲、乙两地相距多少千米? 刘的词语 张明坚持冬季长跑.他每分钟5/9千米的速度跑,3分钟跑5/3千米,3/5分钟跑多少千米? Many people get the flu.改为一般疑问句.为什么这样改?说明原因. 表示神态和 心情三个字的词语拜托各位了 3Q 1.甲、乙两地相距270km,慢车以 每小时50km的速度从甲地开出,快车 以每小时60km的速度从乙地开出,慢 车先开出1.5h,两车相向而行,设慢车开 出x(h) 后两车相遇,则列出的方程为 _____________. 一辆汽车从甲地开以往乙地,第一小时行驶了全程的五分之一,第二小时行驶了全程的四分之一,这时正好距离终点还有15千米.甲乙两地相距多少千米 春种一粒粟,秋收万颗子. 甲乙两地相距270km,慢车以每小时50km的速度从家地出发,快车以每小时60Km的速度从乙地出发,两车相向而行慢车嫌开出1.5h,求慢车开出几小时后两车相遇?《方程》把设的什么都写出来! 井冈山作文的结尾怎么写 春种一粒粟,秋收万颗子的种和收是什么意思?这是我们的作业 ( )立( )群填动物的名称 主题为“井冈颂”的作文 叶圣陶作文大赛都有哪些作文?今天最好(2010.10.25) 用动物名称补写,()立()群 《西江月 井冈山》的写作背景是什么. 英语翻译本公司专注于数字化城市、虚拟现实、动漫、三维动画、效果图、多媒体、电子商务第三方、支持互联网图象等各种技术元素,为不同行业的客户提供多元化最终产品和服务形式,满 ()立( )群,要填动物名称,请帮帮忙! Many people loved the show (改为一般疑问句) 英语翻译随机变量的数学期望是用于刻划取值的平均位置或集中位置,随机变量ζ的数学期望也称为数X以概率P为权的加权平均.因此数学期望是经济决策中的一项重要决策依据.通过计算各个决 求名著读后感100字的!不要抄袭,要自己写的! 小华骑自行车每小时行X千米,6小时行(6X)千米,Y小时行(XY)千米,行56千米需(56/X)小时,中的56/X是只是问你们56/X那/是+是-还是X还是除 英语翻译Abstract—Fires continue to occur in modern architecture,thepeople's lives and property has brought huge losses.In order toreduce the fire in the building automatic fire alarm equipmentplaced into a necessity.This paper discusses the aut 下列现象不属于生命现象的是A.生长繁殖B消化吸收C遗传变异D风华腐蚀 有关‘爱’的话题作文精彩片段和题记 签中的六甲祈保是什么意思 我要写一篇小说,求人物名.女主角性格豪放,非常乐观,可是有一天她收到一封陌生人的信,真相慢慢浮出水面...女主角姓什么无所谓,奇葩点没关系,但是名字中带有“兮”字或“雅”字.男主角 话题作文优美的题记 观音灵签六甲祈保什么意思 有动物的成语 描写动物的成语
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘