'下面是这个问题的解决办法,即子分类技术,不过我并不赞成.而且这段代码只针对单一按钮. '使用子分类技术,在调试过程中很容易产生最著名的一般保护性错误. '如果对所有按钮进行子分类处理,得少做改动. '建议还是自己做控件,作图形按钮无论是使用还是修改都很方便. '代码网上获得,未作改动. '有关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
Thank you very much!
再在 Click 事件中加 sendKeys VbTab 哪里还会有虚框?
我怎么不行啊?
'使用子分类技术,在调试过程中很容易产生最著名的一般保护性错误.
'如果对所有按钮进行子分类处理,得少做改动.
'建议还是自己做控件,作图形按钮无论是使用还是修改都很方便.
'代码网上获得,未作改动.
'有关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