Access, как вызвать CallWindowProc ?

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
KSA
Сообщения: 10
Зарегистрирован: 18 май 2005, 18:15

Субклассицирую окно через SetWindowLong с индексом (-4). Результат функции, который должен являться адресом стандартной процедуры обработки, сохраняю в глобальной переменной типа Long (это правильно, или нет?). Так же пробовал вызывать перед SetWindowLong - GetWindowLong. Числа, получаемые на выходе были равны.

В итоге, сообщения действительно стали передаваться моей новой процедуре. Но теперь, никак не могу передать управление из нее стандартной. Т.е.:

Private Declare Function CallWindowProc Lib "user32" (ByVal PrevWndProc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Public PrevWP As Long

Public Function NewWindowProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
MsgBox CStr(PrevWP) & " " & CStr(hWnd) & " " & CStr(Msg)
NewWindowProc = CallWindowProc(PrevWP, hWnd, Msg, wParam, lParam)
MsgBox "Вызов прошел"
End Function


Где, PrevWP инициализируется GetWindowLong, вызываемой из события открытия формы, в модуле формы.

Так вот, первый MsgBox появляется, и выводит адрес (отрицательное число в знаковом представлении получается), манипулятор, и код сообщения (31). А вот до второго MsgBox дело уже не доходит. Программа теряется где-то в CallWindowProc.

В чем же дело?
KSA
Сообщения: 10
Зарегистрирован: 18 май 2005, 18:15

Все. Разобрался - надо еще Alias - CallWindowProcA указать.
Ответить