Public Type POINTAPI x As Long y As Long End Type Public Type MSG hwnd As Long message As Long wParam As Long lParam As Long time As Long pt As POINTAPI End Type Public Declare Function PeekMessage Lib "user32" Alias "PeekMessageA" (lpMsg As MSG, ByVal hwnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, ByVal wRemoveMsg As Long) As Long Public Declare Function TranslateMessage Lib "user32" (lpMsg As MSG) As Long Public Declare Function DispatchMessage Lib "user32" Alias "DispatchMessageA" (lpMsg As MSG) As Long Public Const PM_REMOVE = &H1 Public Const PM_NOREMOVE = &H0 Public Const WM_QUIT = &H12 Sub MyDoEvents(hwnd As Long) While PeekMessage(mMsg, Me.hwnd, 0, 0, PM_NOREMOVE) <> 0 If mMsg.message <> WM_QUIT Then PeekMessage mMsg, Me.hwnd, 0, 0, PM_REMOVE TranslateMessage mMsg DispatchMessage mMsg End If Wend End Sub 这是我写的一个模拟doevents的函数,你把它粘贴到一个模块中去,像使用doevent一样的去使用它就可以看出效果是一样的,只不过系统的Doevents函数考虑的事情更多,再次不加详述了,也难怪这种问题在vc的版子上发表,毕竟涉及了一些api的调用。
x As Long
y As Long
End Type
Public Type MSG
hwnd As Long
message As Long
wParam As Long
lParam As Long
time As Long
pt As POINTAPI
End Type
Public Declare Function PeekMessage Lib "user32" Alias "PeekMessageA" (lpMsg As MSG, ByVal hwnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, ByVal wRemoveMsg As Long) As Long
Public Declare Function TranslateMessage Lib "user32" (lpMsg As MSG) As Long
Public Declare Function DispatchMessage Lib "user32" Alias "DispatchMessageA" (lpMsg As MSG) As Long
Public Const PM_REMOVE = &H1
Public Const PM_NOREMOVE = &H0
Public Const WM_QUIT = &H12
Sub MyDoEvents(hwnd As Long)
While PeekMessage(mMsg, Me.hwnd, 0, 0, PM_NOREMOVE) <> 0
If mMsg.message <> WM_QUIT Then
PeekMessage mMsg, Me.hwnd, 0, 0, PM_REMOVE
TranslateMessage mMsg
DispatchMessage mMsg
End If
Wend
End Sub
这是我写的一个模拟doevents的函数,你把它粘贴到一个模块中去,像使用doevent一样的去使用它就可以看出效果是一样的,只不过系统的Doevents函数考虑的事情更多,再次不加详述了,也难怪这种问题在vc的版子上发表,毕竟涉及了一些api的调用。