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

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

代码审查——提高代码质量的终极武器 值得开发者关注的8个HTML5 API 最初设计方案大公开!LINE STAMP 贴图诞生记 安全宝联合华为成立抗D联盟 储备防御带宽达110G 专访中科院贾海鹏:给异构开发者的六个建议 我们死后的遗留数据将会如何处理? 传微软考虑重大重组 或势在必行 云适配CEO陈本峰:8年磨一剑 Splashtop企业应用:SplashApp让办公移动起来 时空旅行+内付费“植物大战僵尸2”下月18日全球同步发行! 中移动推网络电话Jego 后来者能否居上? 防止数据泄露:BYOD下的管理员5大妙招 咕咚副总裁司建铭谈移动时代的“软硬整合” 未来的物联网结点:可穿戴设备 应用开发的4个技巧,让程序能真正为用户使用 Google早期的10个API:它们现在在哪? 为啥微软开发产品总是慢半拍? Visual Studio 2013 Preview新功能预览 “中国手机游戏四月流水榜”出炉 超半数基于Cocos2d-x引擎 为移动而设计之信息架构篇 难逃厄运:Zynga将关闭Draw Something母公司OMGPOP 直接拿来用!最火的iOS开源项目(一) 是时候抛弃Eclipse转向IntelliJ了 Arrow:轻量级的Python时间日期库 编程语言API,你最青睐哪一款? 推动新输入方式发展:英特尔为感知计算设1亿美元基金 AWS到底有多大?目前看来有158000台服务器 C语言实现树的动态查找 第五届中国云计算大会于北京隆重举行 改变企业移动化:新Google地图API支持用户定制 诺基亚旗舰手机EOS真机图曝光 配备“巨型”摄像头 VC++中的内部交互调试器在哪? 人邮版的C++面向对象高效编程如何? realplayer中文件菜单栏中的以看过的文件名,怎么删除? 如何实现真正的无标题栏的拖动? 用"select top n"取了前n纪录后,要再接着取n+1至2n条纪录,接着再取2n+1至3n……,这种取法要怎样实现呢? 如何在Excel中编制一个宏? 如何得知程序的一个实例正在运行? 送分了,送分了,虽然不多,但天天有! 为什么select count(*) from test 时,提示表或示图不存在!!! 请问如何设置mp3文件的在线播放?? 请问在内部局域网正常的情况下,打印机无法共享(共享以后没有效果)的主要原因是什么?谢谢! ===我对Linux上的Oracle8.1.7.0.1操作的时候只读,为什么啊???==== 请给我一个GetCurrentDirectory使用实例, 问一个深入MFC的简单问题 请问有关delphi项目编译的一个小问题。 各位,那里有VisualAge for Java4.0下在?我从ibm的网站上下载了,但是安装不了,说是语言不对! shcv.dll 编译不过去!!!!! have a test!have a test!have a test!have a test!have a test!have a test!have a test!have a test! mysql 结果中再次查询如何才能实现呢 pc2phone java支持byte[] a = String.getBytes("iso-8859-1");转换吗? c语言中关于对windows命令调用的语法、命令及其格式。 怎么样捕捉数据库连接出错的信息?? 在SQL语句中,如何获得一汉字字段的字节长度,而不是字符长度?如“测试”返回4,不是2 如何建树 winsock.dll提供的都是什么函数?如果它提供的是winsockAPI,那么winsock32。lib提供的又是些什么?它们重复吗? FormatDateTime这个函数的日期间的字符不支持汉字,怎么解决? 关于用JAVA生成GIF的问题?(16M的GIF,256的我已经知道了) 如何在ACCESS李使用SQL? 梦天请进,谢谢! 能不能将对象序列化后存到数据库再取出还原?有没有例子? 分屏的已个视要做成对话框,请指教,顺便告诉我如何给分,只能给这么多 sorry,梦天进来,thanks!! 急!请问怎么在java类里写编译另一个类的语句?? 如何在ACCESS里使用SQL? 谁有BO2K源代码,我愿高分求购.不为别的目的,只为深入学习系统编程 如何实现 调用IE打开一个页面,并且多次调用,只打开一个窗口? 帮我点一下我就给分! 一个简单问题:我在给Access数据表中增加记录,其中一字段是CTime类型,但老是非法操作。调试后错误出现是:return (GetLocalTm(NULL)->tm_year) + 1900 不知如何解决。请各位大师救救我把。 动态的保存datawindow object的问题 怎么给一个(tab control)属性单 的标题栏上给添加一个背景位图呢! 千山一刀之忍者神龟进来拿分!!! 怎样得到年、月、日的值 那里有C++ Primer这本书 十万火急!!!怎么在oracle+developer2k中取得本机ip.——高分奉上!! 如何判断输入的信息是中文? dll调用找不到程序入口?? 怎么用win2000来制作一张可以代光盘启动的启动盘 我怎么用一个ALT 封装一个 ToolBar Control的 ActiveX的控件! 谁有什么好的例子吗! 给个意见,是联通好呢?还是移动好? 如图小正方形的七分之六被阴影覆盖,大正方形的九分之八被阴影覆盖.求小正方形与大正方形的面积比 多项式除以多项式的法则,如:(2a^2*b^2+3ab^3)/(4a^2*b^5+2ab) 只含字母y的多项式最多有几项 如图,图中的大正方形中阴影部分的面积是小正方形中阴影部分面积的3倍.小正方形中空白部分的面积是大正方形中空白面积的( )%. 正数的相反数是负数,这句话用符号表示是?急!在线等! 0.5是有几个千分之一组成的 有8个约数的数中,最小的是多少?能列出算式吗? 相反数用什么符号表示 已知A有12个约数,9A有24个约数,15A有36个约数,5A有几个约数 一个两位数,他既有约数2,又有约数5,还有约数3,这个两位数最小是( ) 相反数怎么用符号表示总不会让我写字- -bu shi你们理解错了,比如:7的相反数是-7,,我知道是负号 已知A有12个约数,9A有24个约数,15A有36个约数今天我要交作业的!少写了,问A是几。 怎样区分单项式和多项式?就像那个单项式集合和多项式集合我就会分乱了,搞不清楚,就连单项式和多项式的次数次数都搞不清楚,你们能给我详细解答还有举例子吗?(请你们回答时要一个一 单项式与多项式的概念 下列说法正确的是( )A.一个数的相反数是负数或0 B.符号不同的两个数互为相反数 C.非负数的相反数是非正数. D.相反数等于本身的数不止数0一个 怎样区别单项式和多项式?如:x分之3,x+1,-2又2分之一,4分之a,0.72xy,2分之x-1中单项式有几个?分别是?多项式有几个?分别是?并且还要说出你怎样区别单项式与多项式 多项式与单项式的概念问题问:1+1,是单项式还是多项式?根号X是整式么?如果1+1是多项式,那么经常有这样的题:(a-3)x^2+x是单项式,那么求a是多少?很简单我们都另a-3=0,则a=3.那么,这个式子就 下列说法哪个正确1符号不同的俩个数互为相反数2整数的相反数是分数3非负数的相反数是非正数.还有一个4一个数的相反数一定是负数 单项式与多项式区别 什么是单项式,什么是多项式,x5-6xy+y3是关于y的几次多项式,请说明原因 多项式乘多项式法则 C#输入一组非0整数(以0作为输入结束标志)到一维数组中,求出这一组数的平均值,统计出正数和负数的个数.如,输入4,5,6,0,则输出 5是C#的问题,求解 多项式和单项式的定义 多项式乘多项式法则的字母表达式 汇编语言要输入一个整数输出对应的负数或者输入负数输出对应的整数就是如果输入-15要变成15输出,输入15变成-15输出,不知道怎么用汇编实现负数的输入输出,还想问问-1024怎么用16位有符号 单项式和多项式的概念是什么? 请问该如何设置windows的货币符号和数字格式? 一个小数由8个1 五个十分之一和22个千分之一组成 这个数写作 读作 c语言:编程统计数组a中的正数,0,负数的个数,并输出统计结果?(1)#include "stdio.h"int main(){int s[40],i=0,j,num=0,a=0,b=0,c=0;for (i=0;s[i]!='\n';i++ ){scanf("%d",&s[i]);num++; } for(j=0;j0) a++;else if (s[j]==0) b++;else c+ 在excel表中怎样将数据设置为货币格式,货币符号,小数点后位为1 如果用&(A)表示A的所有约数的个数,例如&(4)=3,那么&(&(18))等于多少? 用C语言编写程序,任意输入10个数,计算所有正数的和、负数的和以及这10个数的总和 1.一个由8个十,3个十分之一,8个千分之一组成,这个数写作( ) 1.游泳馆向一个长50米、宽25米、深1.6米的空游泳池里注水.经过0.6小时水深达0.2米,这样的话,几小时能把游泳池注满?(用比例知 如何在4*4的方格纸中表示根号5和根号2的正方形面积?图片正方形边长 C语言写编程,输入10个数,分别计算正数和负数的和 我这程序哪里不对啊?#includemain(){int i=0;double x,sum1=0,sum2=0;for(i=0;i 一个数是由10个一,5个十分之一和3个千分之一组成的,这个数写作( ),读作( )保留一位小数是( ),保留两位小数是( ). 一块正方形地的面积是640平方米,把它画在图纸上面积是40平方厘米,求这幅图的比例尺 如图,小正方形的七分之六被阴影覆盖,大正方形的九分之八被阴影覆盖,求小正方形与大正方形的面积比要式子 方法 过程 10个一.4个十分之一,8个千分之一组成的数写作(),精确到百分位约是() 5的平方是用根号怎么表示,正方形面积5平方米,求边长是多少用根号怎么表示 如下图,阴影部分占小正方形面积的3分之1,占大正方形面积的5分之1,则小正方形的则小正方形的面积:大正方形的面积=( )【求做题方法或算式】 图中阴影部分的面积是48平方米,梯形的面积是多少平方米? 已知一个正方形与一个长方形面积相等,长方形的长为50根号2cm,宽为40根号2cm,求正方形边长 一个小数由8个十,6个0.01和五个0.001组成8个十,6个0.01和5个0.001组成,这个小数是什么? X和Y皆为8位无符号二进制数,分别存在外部RAM的2000H和2001H 单元中,编写一能完成如下操作并把操作结果(设Z 单项式和多项式最简单的区分方法最好能举一些例子,如X-4分之一是单项数还是多项式 多项式除以多项式的法则是什么?因为我是初一的,所以可不可以请各位讲得简单点啊!比如说,2abc+2ab^2c+c^2+c^2b/c+cb 片外RAM区从1000H单元开始存有100个单元字节无符号数,找出最大值并存入1100H单元 在内部RAM的21H单元开始存有一组单字节无符号数,数据长度为20H,编写程序要求找出最大数存入MAX单元 . 汇编语言问题 判断BUF中的数是正数,负数,还是0,并分别统计它们的个数判断BUF中的数是正数,负数,还是0,并分别统计它们的个数DATA SEGMENTBUF DB 1,-1,-2,-3,-0 A DB 0B DB 0D DB 0N EQU 5DATA ENDSCODE SEGMENTASSUME (2/2),从20H单元开始有一无符号数据块,其长度在20H单元中,求出数据块中最大值,并存入21H单元 求救 明天补考单片机 .设内部RAM 40H单元存放有一有符号数,判断其值是否小于,等于或大于0,分别在41H单元写入0,1或2,完成下列程序.START:MOV A,40H-------- IERO 判断累加器A是否小于0-------- POSITIVE 判 在BUFF开始的存储区中存放30个带符号数,试统计其正数,负数和零的个数.分别将个数放至A1,A2,A3单元我知道大体思路,就是具体的程序不会写. 一个数是由5个十,6个十分之一25个千分之一组成的这个数写成小数是( ),计数单位是( ),包一个数是由5个十,6个十分之一25个千分之一组成的这个数写成小数是( ),计数单位是( ),包含( )个这样的 .ARRAY单元开始存放200个有符号字节数,统计出其正数、0和负数的个数,并把它们分别存入N1、N2、和N3中.我不知道哪个是正确的.能说明下吗 面积为30平方米的大正方形的四个角都是面积为3平方米的小正方形,用计算器求阴影部分的正方形边长 编一程序:比较两个无符号数的大小.把大数存入MAX单元不是C语言,是汇编语言的。麻烦再看看帮忙 如图,阴影部分的面积是大正方形面积的37.5%,是小正方形面积的三分之二,则小正方形面积是大正方形面积的百分之几?抱歉,没时间了所以没画图 列式写清楚 多项式除以多项式的法则 如图,阴影部分的面积是96平方米,那么梯形的面积是多少平方米?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn