如何得知鼠标是按了那个菜单

LuBingLin 2003-10-18 12:21:02
在输入框中点击右键弹出菜单项,如何获知点了那个菜单项。
...全文
76 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ufozq77 2003-10-21
  • 打赏
  • 举报
回复
那你就先把文本框自身的右键菜单去掉,再打开自己的
没有问题的

在Textbox的MouseDown事件中判断鼠标按键是否为右键:
If Button=vbRightButton Then
Text1.Enabled=False
End If
在MouseUp事件中:
Text1.Enabled=True

这样就可以了.即鼠标右键按下时临时禁用TextBox.

如果必须按题设中的要求,那可能要用HOOK拦截Menu的Initialize事件了,很麻烦,不过是治本的办法.别问我,我不会.
---------------------------------------------------------------

Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then
Me.PopupMenu menu
End If
End Sub
---------------------------------------------------------------

Option Explicit

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)

If KeyCode = vbKeyControl Then

If Len(Clipboard.GetText) > 0 Then

Clipboard.Clear

End If

End If

End Sub

Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button = vbRightButton Then

OldWindowProc = GetWindowLong(Text1.hWnd, GWL_WNDPROC)

' 取得窗口函数的地址

Call SetWindowLong(Text1.hWnd, GWL_WNDPROC, AddressOf SubClass1_WndMessage)

' 用SubClass1_WndMessage代替窗口函数处理消息

End If

End Sub

Private Sub Text1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button = vbRightButton Then

Call SetWindowLong(Text1.hWnd, GWL_WNDPROC, OldWindowProc)

' 恢复窗口的默认函数



' 弹出自定义菜单

End If

End Sub


'Module1:

Option Explicit

Public OldWindowProc As Long

' 保存默认的窗口函数的地址

Public Const WM_CONTEXTMENU = &H7B

' 当右击文本框时,产生这条消息

Public Const GWL_WNDPROC = (-4)



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 = True

Else

SubClass1_WndMessage = CallWindowProc(OldWindowProc, hWnd, Msg, wp, lp)

' 如果消息不是WM_CONTEXTMENU,就调用默认的窗口函数处理

End If

End Function

kmzs 2003-10-21
  • 打赏
  • 举报
回复
那就困难了!
LuBingLin 2003-10-21
  • 打赏
  • 举报
回复
文本框自身的右键菜单啊!!!!!!!!
kmzs 2003-10-18
  • 打赏
  • 举报
回复
是你的右键弹出菜单,还是控件的!
efei4000 2003-10-18
  • 打赏
  • 举报
回复
用hook,观察消息流了!!!
看看vc之类的书,会认识很深刻!!!
在线考试使用说明书 配置源程序 附加数据库SQL Server 2000 (1)将TM\09\ExamOnLine\App_Data文件夹中的扩展名为db_ExamOnline.mdf和db_ExamOnline.ldf的两个文件拷贝到SQL Server安装路径下的Data文件夹中。 (2)打开SQL Server 2000中的“企业管理器”,然后展开本地服务器,在“数据库”数据项上单击鼠标右键,在弹出的快捷菜单中选择“所有任务”/“附加数据库”菜单项。 (3)将弹出“附加数据库”对话框,在该对话框中单击【 】按钮,选择所要附加数据库的db_ExamOnline.mdf文件,单击【确定】按钮,即可完成数据库的附加操作。 配置IIS: (1)依次选择“开始”/“设置”/“控制面板”/“管理工具”/“Internet信息服务(IIS)管理器”选项,弹出“Internet信息服务(IIS)管理器”窗口,如图1.1所示。 图1.1 “Internet信息服务(IIS)管理器”窗口 (2)选中“默认网站”节点,单击右键,选择“属性”,如图1.2所示。 图1.2 选择“属性”菜单项 (3)弹出“默认网站 属性”对话框,单击“网站”选项卡,在“IP地址”下拉列表中选择本机IP地址,如图1.3所示。 图1.3 默认网站 属性 (4)单击“主目录”选项卡,单击“浏览”按钮,如图1.4所示,弹出“浏览文件夹”对话框,选择您的网站路径。 图1.4 “主目录”选项页 (5)选中首页文件,单击鼠标右键,在弹出的菜单中选择“浏览”菜单项。 使用说明 系统介绍 为了保障整个系统的安全性,在线考试系统实现了分类验证的登录模块,通过此模块,可以对不同身份的登录用户进行验证,确保了不同身份的用户操作系统。在抽取试题上,系统使用随机抽取试题的方式,体现了考试的客观与公正。当考生答题完毕之后,提交试卷即可得知本次考试的得分,体现系统的高效性。在后台管理上,分后台管理员管理模块和试题管理模块。分别适应不同的用户,前者只有系统的高级管理员才能进入,对整个系统进行管理。而后者只允许教师登录,教师可以对自己任教的科目试题进行修改,并且可以查看所有参加过自己任教科目的学生成绩。 操作注意事项 (1)本系统管理员用户名为:Tsoft,密码为:111。 (2)实例执行文件位置:TM\09\ExamOnLine\ Login.aspx (3)本系统共分为三种操作权限,分别为管理员、老师、学生。 操作流程  管理员权限 输入账号、密码后进入管理员管理界面如图1.5所示。 图1.5 管理员管理界面 (1)单击“学生信息管理”/“学生基本信息”菜单项,对学生信息进行查询、修改及删除操作。 (2)单击“学生信息管理”/“添加学生信息”菜单项,对学生信息进行添加操作。 (3)单击“教师信息管理”/“教师基本信息”菜单项,对教师信息进行查询、修改及删除操作。 (4)单击“教师信息管理”/“添加教师信息”菜单项,对教师信息进行添加操作。 注意:每个教师只能负责自己的课程,其它课程只能有其他课程教师管理。 (5)单击“试题信息管理”/“试题基本信息”菜单项,对试题信息进行查询、修改及删除操作。 (6)单击“试题信息管理”/“添加试题信息”菜单项,对试题信息进行添加操作。 (7)单击“科目信息管理”/“考试科目设置”菜单项,对考试科目信息进行添加操作,如图1.6所示。 图1.6 考试科目设置 (8)单击“考试结果管理”/“考试结果”菜单项,对考试结果进行查询及删除操作,如图1.7所示。 图1.7 考试结果 (9)单击“管理员信息维护”/“修改密码”菜单项,对管理员操作密码进行修改操作。  学生权限 学生登录后,只能进行考试答题操作,如图1.8所示。 图1.8 学生考试  教师权限 教师登录后,可对试题基本信息进行添加、修改、查询及删除操作。同时对学生考试成绩进行查询及删除操作。如果教师对现有的密码不满意,还以修改自己的密码,如图1.9所示。 图1.9 教师权限
在线考试系统 SQL Server 2000 C# 源文件 附加数据库SQL Server 2000 (1)将TM\09\ExamOnLine\App_Data文件夹中的扩展名为db_ExamOnline.mdf和db_ExamOnline.ldf的两个文件拷贝到SQL Server安装路径下的Data文件夹中。 (2)打开SQL Server 2000中的“企业管理器”,然后展开本地服务器,在“数据库”数据项上单击鼠标右键,在弹出的快捷菜单中选择“所有任务”/“附加数据库”菜单项。 (3)将弹出“附加数据库”对话框,在该对话框中单击【 】按钮,选择所要附加数据库的db_ExamOnline.mdf文件,单击【确定】按钮,即可完成数据库的附加操作。 系统介绍 为了保障整个系统的安全性,在线考试系统实现了分类验证的登录模块,通过此模块,可以对不同身份的登录用户进行验证,确保了不同身份的用户操作系统。在抽取试题上,系统使用随机抽取试题的方式,体现了考试的客观与公正。当考生答题完毕之后,提交试卷即可得知本次考试的得分,体现系统的高效性。在后台管理上,分后台管理员管理模块和试题管理模块。分别适应不同的用户,前者只有系统的高级管理员才能进入,对整个系统进行管理。而后者只允许教师登录,教师可以对自己任教的科目试题进行修改,并且可以查看所有参加过自己任教科目的学生成绩。 操作注意事项 (1)本系统管理员用户名为:Tsoft,密码为:111。 (2)实例执行文件位置:TM\09\ExamOnLine\ Login.aspx (3)本系统共分为三种操作权限,分别为管理员、老师、学生。
功能简介 Excellent Compare 是 Microsoft Excel 工作表比较同步工具,有以下功能: 实现了把两个 excel 文件并排放在一个窗口上同步滚动 可以在详细比较窗口中随时修改内容。 多语言支持 可以定制比较规则,提供VBS脚本支持。 shell编程,集成到资源管理器右键菜单 可以比较值、公式、批注。 基于关键列比较和逐行比较 在 excel 窗口中画椭圆 文件拖动 工程文件关联 ============================== 配套的 ocx/dll 说明 ============================== CMVbEagleBar.ocx 鹰眼导航控件,VB6.0开发。是一个半成品,没有精力做了。 SOEcContextMenu.dll Windows shell 菜单动态库。VB6.0开发。 SoExcelTeam.dll 检测EXCEL的操作,得知行列滚动的动态库。VB6.0开发。 感觉这玩意儿有点土。应该有更成熟的方法。 SoHook.dll 被 SoExcelTeam.dll 调用到的动态库,检测EXCEL中鼠标的滚动动作。VC6.0开发。 ============================== ExcellentCompare.exe 的编译 ============================== 使用VB6打开 src\ExcellentCompare-vb\ExcellentCompare.vbp 即可。 注意:如果报不能加载 '......\ExcellentCompare EXE 版本\src\ExcellentCompare-vb\CMVbEagleBar.ocx' --继续加载工程吗? 请手工注册控件 CMVbEagleBar.ocx 或者执行 MakeSetup\ExcellentCompare.EXE 先安装。 ============================== 废话 ============================== 我喜欢共享就共享 我喜欢开源就开源 我喜欢加密就加密 我喜欢什么图标就用什么图标 …… 编程的乐趣就在这里,真正的 DIY。 人生的乐趣就在于无拘无束、做自己想做的事。

1,485

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧