首页产品库评测行情新闻|手机数码笔记本台式机DIY硬件数字家庭数码相机办公外设|软件下载游戏开发|社区

更多

数码相机
MP4
LCD
机箱
音箱

天极网 > 开发频道>VB中抑制控件的弹出菜单

VB中抑制控件的弹出菜单

2000-07-12 00:00作者:出处:-责任编辑:

p> 在VB的某些控件文本框TEXTBOX)、组合框COMBOBOX)等上单击鼠标右键都会有缺省的弹出菜单,这些缺省弹出菜单,在某些情况下我们并不需要或者根据实际情况需要使用自己的弹出菜单,那么如何抑制控件的弹出菜单呢?我们需要检测控件的鼠标右键单击消息,然后什么事也不做或者使用自己的弹出菜单,这需要编写一个钩子函数来完成。下面以抑制文本框的弹出菜单为例说明实现方法。

窗体添加一个模块,在模块中编写钩子函数:

首先声明使用的API函数及常量,

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
Declare Function SetWindowLong Lib
 "user32" Alias "SetWindowLongA" _
  (ByVal hWnd As Long, ByVal nIndex 
   As Long, ByVal dwNewLong As Long)  _
   As Long
Public Const GWL_WNDPROC = -4
Public Const WM_RBUTTONUP = &H205
Public lpPrevWndProc As Long
Private lngHWnd As Long
 

钩子函数编写:

Public Sub Hook(hWnd As Long)
  lngHWnd=hWnd
  lpPrevWndProc = SetWindowLong(lngHWnd, 
  GWL_WNDPROC, AddressOf WindowProc)
End Sub

钩子函数撤消:

Public Sub UnHook()
Dim lngReturnValue As Long
lngReturnValue = SetWindowLong(lngHWnd,
 GWL_WNDPROC, lpPrevWndProc)
End Sub

Function WindowProc(ByVal hw As 
Long, ByVal uMsg As Long, _
   ByVal wParam As Long, ByVal 
   lParam As Long) As Long
   Select Case uMsg
检测鼠标击键消息,如果是单击右键
   Case WM_RBUTTONUP
     什么事也不做
    或弹出自己定制的菜单
   Case Else
WindowProc = CallWindowProc(lpPrevWndProc,
 hw, uMsg, wParam, lParam)
   End Select
End Function

在窗体中添加一个文本框,在窗体的Form_Load事件中启动钩子函数:

Private Sub Form_Load()
 Call Hook(Text1.hWnd)
End Sub

在窗体的Form_Unload事件中撤消钩 ?

Private Sub Form_Unload(Cancel As Integer)
   Call UnHook
End Sub

注意,在窗体退出时必须撤消钩子函数,否则程序会出错。

本程序在VB5.0、WIN98下调试通过。

关注此文的读者还看过:

返回开发频道首页

共1页。 1
  • 1.VB中抑制控件的弹出菜单

软件频道最新更新

热点推荐

天极服务|关于我们|About us|网站律师|RSS订阅|友情合作|加入我们|天极动态|网站地图|意见反馈|MSN/QQ上看天极
Copyright (C) 1999-2012 Yesky.com, All Rights Reserved 版权所有 天极网络