Многие функции в Win32 API являются функциями обратного вызова. Например, функция перечисления дочерних окон. В эти функции обычно передается указатель на функцию, которая вызывается. В VB для передачи указателя используется оператор AddressOf.
AddressOf procedurename
Давайте используя ее и попробуем реализовать перечисления дочерних окон. Описываем функции Win32 API:
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA"_ (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long Public Declare Function EnumChildWindows Lib "user32"_ (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam_ As Long) As Long
Реализуем функцию обратного вызова.
Public Function EnumWindowProc(ByVal hwnd As Long, ByVal lParam As Long) As Long Dim buff As String * 255 Debug.Print "Enum" GetWindowText hwnd, buff, 255 Form1.List1.AddItem buff EnumWindowProc = True End Function
Вызываем ее при нажатии на кнопку на форме.
Private Sub Command1_Click() List1.Clear Dim lParam As Long EnumChildWindows Me.hwnd, AddressOf EnumWindowProc, lParam End Sub
Смотрим результат:
Вобщем-то сложностей никаких, достаточно правильно описать функцию обратного вызова.