很简单的功能:
切换选项卡时报出msgbox,问是否切换,如果选否则不切。
问题出现了,在触发SSTab1_Click事件时选项卡已经切过去了,虽然可以写代码再控制切回来,但是我要的不是这个效果。高手来帮我想想办法吧,多谢

解决方案 »

  1.   

    我试了,一定行,效果不错
    Private Sub SSTab1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
        If MsgBox("是否切换?", vbYesNo + vbExclamation, "提示") = vbYes Then
           SSTab1.Tab = 2
        Else
           SSTab1.Tab = 0
        End If
    End Sub
      

  2.   

    在mouseDown与mouseUp事件中都可以的
      

  3.   

    多谢2楼帮忙,可是有几个问题:
    1:点“否”没用,还是切过去了
    2:我希望只在点选项卡的时候才报msg,而不是点整个sstab时
    3:不只是在选项卡0和2之间切换,而是任意两个之间
      

  4.   

    模块:
    Option Explicit
    Public Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
    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 LongDeclare Function SetWindowLong _
    Lib "user32" Alias "SetWindowLongA" _
    (ByVal hwnd As Long, _
    ByVal nIndex As Long, _
    ByVal dwNewLong As Long) As Long
    Public Const MB_YESNO = &H4&
    Public Const WM_USER = &H400
    Public Const TAB_NCCLICK = WM_USER + 300
    Public Const GWL_WNDPROC = -4
    Public flag As Long
    Global lpPrevWndProc As Long
    Dim i As Long
    Public Sub Hook(ByVal hwnd As Long)
        lpPrevWndProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)
    End SubPublic Sub UnHook(ByVal hwnd As Long)
        Dim lngReturnValue As Long
        lngReturnValue = SetWindowLong(hwnd, GWL_WNDPROC, lpPrevWndProc)
    End SubFunction WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        Dim hMenu As Long, i As Long
        Select Case uMsg
       Case TAB_NCCLICK
            If MsgBox("是否切换?", vbYesNo + vbExclamation, "提示") = vbYes Then
                WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
            Else
               Debug.Print "haha"
            End If
        Case Else
            WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
        End Select
    End Function窗体(有一个sstab控件):
    Option ExplicitPrivate Sub Form_Load()
        Hook SSTab1.hwnd
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        UnHook SSTab1.hwnd
    End Sub注意,编译成p-代码后再测试
      

  5.   

    佩服楼上,不过还有两个小问题:
    1.只在点选项卡的时候才报msg,而不是点整个sstab时
    2.点当前激活的选项卡时不报,当切换时才报
      

  6.   

    Private Sub SSTab1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
        If MsgBox("是否切换?", vbYesNo + vbExclamation, "提示") = vbYes Then
           SSTab1.Tab = 2
        Else
           SSTab1.Tab = 0
        End If
    End Sub