如何使command控件获得焦点时不显示出虚边框?

解决方案 »

  1.   

    [email protected]   
    Thank you very much!
      

  2.   

    何必这么烦,把 TabStop 设为 false,让它永远不能获得焦点,鼠标照样能行。
    再在 Click 事件中加 sendKeys VbTab 哪里还会有虚框?
      

  3.   

    NewPeople(新新人类):
    我怎么不行啊?
      

  4.   

    subclassing住GetFoucs,然后Exit不执行绘制边框的过程就是了
      

  5.   

    ikey:谢谢你了,请发给我一份[email protected]
      

  6.   

    '下面是这个问题的解决办法,即子分类技术,不过我并不赞成.而且这段代码只针对单一按钮.
    '使用子分类技术,在调试过程中很容易产生最著名的一般保护性错误.
    '如果对所有按钮进行子分类处理,得少做改动.
    '建议还是自己做控件,作图形按钮无论是使用还是修改都很方便.
    '代码网上获得,未作改动.
    '有关API 使用上的问题,希望能够与我联系,共同学习[email protected]'在窗体部分
    Option Explicit
    Private Sub Form_Load()
        HookNoFocus Command1.hWnd
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        UnHookNoFocus
    End Sub'在模块部分.
    Option Explicit
    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
    Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPrivate Const GWL_WNDPROC = (-4)
    Private Const WM_SETFOCUS = &H7Private OldProc As Long
    Private m_hWnd As LongPrivate Function WinProc&(ByVal hWnd&, ByVal wMsg&, ByVal wParam&, ByVal lParam&)
                      
        Select Case wMsg
            Case WM_SETFOCUS
                Exit Function
        End Select
        
        WinProc& = CallWindowProc(OldProc, hWnd, wMsg, wParam, lParam)
    End Function
    Sub HookNoFocus(ByVal nhWnd As Long)    If OldProc <> 0 Then Exit Sub
        
        m_hWnd = nhWnd&
        
        OldProc = SetWindowLong(nhWnd&, GWL_WNDPROC, AddressOf WinProc)End Sub
    Sub UnHookNoFocus()    If OldProc = 0 Then Exit Sub    SetWindowLong m_hWnd, GWL_WNDPROC, OldProc
        OldProc = 0
    End Sub