谢谢

解决方案 »

  1.   

    这个问题很难吧!
    可以在按钮后放一个TEXT只类的空件,当点击按钮时,让TEXT获得焦点。
    不知道效果怎么样
      

  2.   

    超简单,一个简单的子类化程序就可以解决,子类化(SubClass)是一项技术,许多xp的菜单等都离不开他!!!最好找找有关资料看看,以后对你的编程一定有用!!
    其实那个框框就是焦点RECT在窗体上画一个按扭,输入以下代码:
    Private Sub Form_Load()
        Hook Me.hWnd
    End Sub
    再新建一个模块(一定要在模块里!!!),输入以下代码:
    Option Explicit
    '-----------------------------------------------
    ' 只需要在WinProc过程中的Select Case语句中加
    ' 入需要拦截的Windows消息,以及你需要完成操作的代
    ' 码,就可以实现你的子类化程序。
    '-----------------------------------------------
    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 LongPublic Const GWL_WNDPROC = (-4)
    Public Const WM_SETFOCUS = &H7Private OldProc&
    Private mhWnd&'==================================================
    '回调
    Function WinProc&(ByVal hWnd&, ByVal wMsg&, _
                      ByVal wParam&, ByVal lParam&)         
        Select Case wMsg
            Case WM_SETFOCUS
             Debug.Print "看有没有??"
             Exit Function
        End Select
        WinProc& = CallWindowProc(OldProc, hWnd, wMsg, wParam, lParam)
    End Function
    '==================================================
    '==================================================
    '挂钩
    Sub Hook(ByVal nhWnd&)
        If OldProc <> 0 Then Exit Sub
        mhWnd& = nhWnd&
        OldProc = SetWindowLong(nhWnd&, GWL_WNDPROC, AddressOf WinProc)
    End Sub
    '==================================================
    '==================================================
    '脱钩
    Sub UnHook()
        If OldProc = 0 Then Exit Sub
        SetWindowLong mhWnd, GWL_WNDPROC, OldProc
        OldProc = 0
    End Sub
    '==================================================
      

  3.   

    忘了一步最重要的,如果不加这句,点以下关闭就知道了:
    Private Sub Form_Unload(Cancel As Integer)
        UnHook
    End Sub
      

  4.   

    Private Sub Form_Load()
        Hook Me.hWnd
    End SubMe.hWnd还要改为按扭的句柄
      

  5.   

    有一点不理解;
       Case WM_SETFOCUS
             Debug.Print "看有没有??"
             Exit Function
      有了 Exit Function 这个回调函数是如何交给原窗口程序的呢?
      

  6.   

    用了exit function就不再交给原窗口程序处理了