在MOVEDOWN事件中,将BUTTON=2(好象是右建)过滤掉,你试试

解决方案 »

  1.   

    是不是可以考虑用textbox的KEYPRESS事件
    来忽略
      

  2.   

    在开始之前我们先看一下Windows的工作机制,其实Windows无时无刻都在发送着消息,只是没有相应的程序去响应罢了!比如用户移动或单击了鼠标,或者按下了键盘上的某个键,windows都会发出相应的消息通知窗口。而我们要做的就是扑获Windows所发出的这条消息,然后用VB的 AddressOf 关键字来取代它。
    我们这次的目标就是扑获WM_CONTEXTMENU这条消息,它在右击文本框时产生。
    程序需要一个窗体、一个文本框,一个标准模块,一个菜单菜单名为mymenu。'模块的代码:
    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
    Public 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 LongPublic Function MyMesg(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
    MyMesg = CallWindowProc(OldWindowProc, hWnd, Msg, wp, lp)
    '如果消息不是WM_CONTEXTMENU,就调用默认的窗口函数处理
    Exit Function
    End If
    MyMesg = True
    End Function窗体的代码:
    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 MyMesg)
    '用MyMesg代替窗口函数处理消息
    End SubPrivate 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 mymenu
    '弹出自定义菜单
    End Sub 第二中方法:对了还有更简单的一个方法
    Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Text1.Enabled = False
    Text1.Enabled = True
    PopupMenu mymenu
    End Sub
    搞定简单吧!(^_^)
    尽量不要使用 AddressOf 来改变一个窗口的默认窗口函数,VB不擅长做这类的工作。  
      

  3.   

    jennyvenus(AdvancedFollowTimes)  的第一种方法可能行得通(我还没试过的),但第二个简单方法应该不能屏蔽键盘产生的右键菜单吧?