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

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

放一个Combo到Toolbar中 -VB资料 改进VB的驱动器列表框 给TreeView控件添加弹式菜单 -VB资料 计算从开机到现在用了多少秒-VB资料 将立体的ListView标题栏转换成平面式的标题栏 -VB资料 禁用窗体上所有控件 -VB资料 拷贝或移动列表框或组合框中的内容-VB资料 利用VB5开发ActiveX控件 利用VB三维面板控件设计流动条 浅谈用VB6.0编写BO程序 巧用Visual Basic的TIMER控件 VB取得控件绝对Top值 VB如何解决VB中的Grid 控件的打印问题 VB如果自定义 MsgBox 的按钮,标题等 VB如何创建数据绑定控件。 VB如何解决VB中的Grid控件的打印问题 VB如何强制文件对话框再次读取正确的磁盘? VB如何取得RichTextBox控件中光标所在行的值? VB如何设定 MsgBox 在若干时间之后若无回应則自动关闭? VB如何使用VB控件Commom Dialog VB如何用VB6写COM组件(二) VB如何用VB6写COM组件(一) VB如何在VB中使用Delphi的控件 VB如何在运行时动态增加控件 显示和隐藏鼠标-VB资料 VB用ActiveX Control Pad VB用API函数改进ListView 控件的显示效果 用VB6.0中文版进行DHTML程序开发 用VB编写标准CGI程序 用VB编写留言板 用VB播放FLASH动画 这对话框我如何去掉 asp.net 能否运行在Solaris系统下,参与者有分 c#请求援助 int a 除以 int b 取他们的余数用C#该怎么写啊?谢谢 求救!显示后台数据,在线等待!等…… jsp中的数据库问题,求教!!急 刚学数据库,弱智问题,高分赠送! 这个查询怎么写? 关于表生成文本文件遇到的事情,急 InstallShield Professional Standard Edition 6.30 英文版的下载(高分:200) 寻一男友:发展方向——>老公 我用serv-u,客户端访问为什么没有用户登陆窗口啊? 脚本验证datetime要准确点的 请问,想做出象Protel(Tango)作图效果的程序,如何下手呢? win API函数的区别(win xp 和win 2000)高难度!! 那儿有winsock.pbl 进入系统的速度变慢????在线等待 当 AllowPaging 设置为真并且选定的数据源不实现 ICollection 时,AllowCustomPaging 必须为真,并且 ID 为 DataGrid1 的 Data 怎么提高搜索速度? 如何printScreen并获得这个图片? 如何用SQL格式化一个IP地址?我得到的IP地址是一串数字,想显示为255.255.255.255那样的样子。 为什么在客户端出现Interface not support的错误? help,关于文本显示! SOS 急急急 请教几个概念? 如何打开一个用winexec打不开的可执行文件。 进入系统的速度变慢????在线等待 请大家谈谈目前比较经典软件,共享的,免费的,大公司的,个人的,国内的,国外的,不分行业等等,只要是经典都可以,请大家畅谈! 欢迎踊跃讨论!如何使得delphi编的exe或dll最小! 基于对话框的打印,打印一块区域!! 一个简单的链问题是输入一个结点请高手在助我 急问!在access中什么字段类型能容纳很多文本?就类似sqlserver中的text!!! 最近有个工程需要用串口(用MSComm控件)来接收ASCII字符信息,怎么用啊!?谢谢! VC++6.0中如何通过Socket从Client端向Server端传送文件? WinCE.NET 系统上如何拷屏 请问如何选择录音的输入设备? 引用“&”和union有没有区别啊? 本版的“跳楼大放送,今年高程、系分模拟试题及备考指南、考前培训笔记、心得,保证通过率。 (romantic999 ) ”你们打的开吗?我打不开 哪里有 车辆管理系统 的资料 请教:(在程序中)如何判断我的系统是否安装SQL Server数据库。如果安装,如何获取SQL Server的版本信息?谢谢! 小问题 请教 将RS232输入的信息转成键盘输入??? 关于表生成文本文件遇到的事情,急 西北人在外(北京,上海,深圳,广州等)打工的兄弟们进来聊聊。 数组问题 急~!!! 如何获得多选框是否被选中 怎样将2003-3-16的字符串串换成时间值 jdom中问题 大家知道今年各个级别考试的通过率是多少吗?什么地方能查到吗? 研究学习COM,哪本书好? 刷涂料用的滚筒刷子有哪几种类型? 其实在我们的生活中,有着许许多多的爱.同学之间的爱,老师之间的爱,朋友之间的爱...其中,最伟大的就是母爱了,请问母爱都体现在什么地方了?《妈妈,谢谢你》这骗作文怎么写才能得做高分(5 in your line of...You cant interpret the letter in your line of argument.It should be read in its own right.请问这两句话翻译成中文的意思是什么?in your line of argument这部分的分析?in one's line of有这个词组吗? 刷涂料用的滚筒刷子有哪几种类型? 什么事情最能体现母爱 过滤纸怎么叠 求作文:国庆见闻,不少于500字,求大家了啊啊啊啊啊啊啊啊啊啊,我现在初一,求大家了啊啊啊啊啊啊啊啊 关于母爱的事件 要一篇写了小伙伴的作文 初一五十词短文 谁有 急求 啊啊啊啊啊啊啊 石家庄身边的新变化作文征文要以“身边的新变化”、“身边的新现象”、“身边的文明故事”、“未来的新发展”、“自己的幸福感悟”为主题用文字描述城市的新变化和新发展,以及对幸 今天大家是不是都用不了line这个软件呀 黑金鱼开过滤泵肚子上会有气泡 金鱼是新买的 水是没困过的自来水 怎么破? 求石家庄暴雪作文有高人来写一篇石家庄暴雪作文吗? 我最敬佩的人300字-400字 过滤泵内置的还是外置的好?为什么? 以变化为主题初二作文 LINE工具怎么样 一条红领巾的底长是100厘米,高是33厘米,做400条红领巾需要红布多少平方米? 向石灰水中加过量的碳酸钠溶液,反应后溶液ph是碳酸钠ph么我认为不是,毕竟里面还有NAOH,但老师是这样讲的,是老师讲错了么 line聊天工具是那个国家的?line聊天工具到底是那个国家开发的,是韩国还是日本?还是其他? 安全帽标R代表什么? 体育通讯稿 line是什么意思 求伴你成长六年级下第九课假如给我三天光明的全部答案,急!明天要交滴!速度啊大神们!求! NOIP2011普及组的题目会太难吗? 请以《你很重要》为话题,写一篇作文.一.除诗歌外,文体不限;二.600字以上 爸爸的年龄是红红的4倍,红红比爸爸小27岁,爸爸和红红各多少岁?解方程题解方程 dot line report是什么意思 求《我很重要》作文一篇朴素点好 让什么让什么作对偶句 例如:让理想与风筝齐飞,让希望与春天同在! finish line dot 5.1怎么样 高中作文水平提高,练习重要?我们很少写作文的,几乎只在考试的时候才会写.我现在高二.文科.作文是应该多花时间在背优美词句上还是练习上?有必要作文周练么?单单积累不行吗?求提高作文 如何放飞风筝 尊师爱师的故事 有关社会实践的重要性的英语小短文 最能体现出母爱的一件事今天11点前要答案!不需要给我作文 尊师故事我眼豪富火堆四哦扶绥 作文一篇:_____________也很重要 位趁东风放纸鸢的上句 Our teather often asks us_(not cut)in line when we're waiting for a bus 菊花瓣过滤纸折叠方法是什么? 几句话的字谜是什么 wait in line 的告示牌用英语怎么写?you should keep__________clean.紧急!wait in line意思为排好队 如果y=( a — 3)x + ( b +2)是y关于x的正比例函数.那么a.b应满足什么条件 noip2011普及组复赛浙江所有人的成绩 PASCAL NOIP1996普及组复赛第二题2.输入三个自然数N,i,j (1 .一项工程,甲,乙两人合做8天可完成.甲单独做需12天完成.现两人合做几天后,余下的工程由乙独自完成,使乙 noip2011普及组复赛成绩什么时候出啊 PASCAL NOIP1997复赛普及组第二题2.将1,2,••••••,9共9个数排成下列形态的三角形.(30%) a b c d e f 计算机的无线功能开关在哪 紧急!NOIP2011普及组复赛,复测如果原来错的批下来还是错的,今年是国家同批,去年和前年我参加的是省里批的,如果错的还是错了要扣10%的分数.今年扣不扣?不懂的别来说. I m on line,so you take your heart on your breast. 一项工程,甲乙两人合作8天可以完成.甲单独做血药12天完成,现在甲乙合作几天后,余下的工程由乙独自完成乙前后两段所用的时间比为1:3,这个工程实际工期多少天?我要过程和答案!谢谢!( 2009中国大事件盘点(可用于作文材料)答的好的后加分 爸爸的年龄是红红的4倍,红红比爸爸小27岁,爸爸和红红各多少岁? in your line of什么意思 过年想自己用滚筒把家里粉刷一下,用的油漆还是涂料,········希望可以详细一点,我一点也不懂. 有关母爱的事件 要真实的! line of your email 调查显示日本半数国民反对《特定秘密保男子法国海岸冲浪遭鲨鱼袭击 一条腿被日本核监督委员会敦促东电“大刀阔斧”澳媒称澳政府拟摒弃前任政府对亚洲战略韩总统好感度调查出炉 卢武铉居首李明美国纽约家长望子成龙 为家中婴儿请家外媒:以色列空袭加沙地带 未造成人员加拿大婚外情网站欲进驻新加坡 遭民众日本一杂志启用胖模特 专为胖女孩设计以色列耄耋作家展望巴以和平并存 遭官苏富比将在墨尔本拍卖一件清朝蓝色丝绸澳媒称澳政府拟摒弃前任政府对亚洲战略法国总理将赴俄罗斯会见俄总理 讨论核阿根廷执政党保住国会最大党地位 但选美政府承诺不会将公民医保个人信息用于智能手机横行 日本偷拍案件五年翻一番英国一女士患巨结肠病 腹部肿大好似怀格鲁吉亚总统大选结束 俄格关系或“有法国总理将赴俄罗斯会见俄总理 讨论核阿根廷执政党保住国会最大党地位 但选外媒:以色列空袭加沙地带 未造成人员放量中阳拔地而起 反弹行情真的来了?暑假里 去武侯祠草堂学历史品传统第六届“福布斯富国中国优选理财师评选希望更大力度支持成都发展 广泛宣传推走院子,走进群众心里留守儿童的快乐大本营全国少儿曲艺大赛首次落户成都下月开赛以作风建设为保障 努力实现科学发展新4所学校今秋将迎来第一批新生皇冠湖商圈:打造休闲购物目的地肺癌顶级专家解读 生活中哪几种“气”谁运危化品 有权说了算?天府新区建立关爱留守学生志愿服务基地先“声”夺人 电影营销出奇兵90后赵彪 用最传统笔墨画当代作品5新股今日开始申购 低发行价无碍打新小赛艇划出大梦想 新津“赛艇”驶向全成都作家马及时推出新作散文集《赤脚的茅盾文学奖获得者刘醒龙本周五成图讲座犯罪分子逃到天涯海角也要缉捕归案优化投资环境 促进投资高位增长
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘