Шаг 135 - О функциях Enum в VB

Многие функции в 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

Смотрим результат:

gif/135_1.gif (3738 b)

Вобщем-то сложностей никаких, достаточно правильно описать функцию обратного вызова.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.