SetWindowCallback()
Синтаксис
SetWindowCallback(@ProcedureName() [, #Window])
Описание
Только для опытных программистов. Эта функция поддерживается только в Microsoft Windows.
Стандартные события должны обрабатываться с помощью обычных команд WaitWindowEvent() и WindowEvent().
Эта команда задаёт процедуру обратного вызова, которая будет вызываться для обработки событий всех открытых Окон. Все события перехватываются этой процедурой и в ней же могут быть обработаны. Для того чтобы в эту процедуру перенаправить события только одного конкретного Окна, можно использовать необязательный параметр '#Window', для передачи в функцию Номера этого Окна. В таком случае, на каждое Окно может приходиться по одной процедуре обратного вызова, эти процедуры будут "связаны", каждая со "своим" Окном. Одновременно с ними может быть создана процедура без дополнительного параметра '#Window', и она будет перехватывать события всех остальных (не связанных ранее с другими процедурами) Окон.
Чтобы отключить перехват событий конкретной процедурой обратного вызова, необходимо вызвать SetWindowCallback(0 ,#Window) с соответствующим параметром '#Window' для связанной с конкретным Окном процедуры, и SetWindowCallback(0) для не связанной с конкретным Окном процедуры.
Предупреждение: Будьте осторожны, это относительно низкоуровневые операции, и неправильная обработка событий в процедуре обратного вызова может вмешаться во внутреннюю обработку событий Purebasic.
Параметры
@ProcedureName() Адрес используемой процедуры обратного вызова. Процедура обратного вызова должна иметь 4 параметра и имеет следующую форму: Procedure MyWindowCallback(WindowID, Message, WParam, LParam) Result = #PB_ProcessPureBasicEvents ; ; Код обработки событий ; ProcedureReturn Result EndProcedure
#Window (дополн.) Номер идентифицирующий Окно, которое требуется "связать" с процедурой обратного вызова. Если этот параметр опущен, процедура будет перехватывать события всех Окон, которые ранее не были "связаны" с другой процедурой обратного вызова.
Возвращаемое значение
Ничего.
Пример:
В этом примере показано, как проверить несколько параметров окна (используя константы Windows API):Procedure WinCallback(hWnd, uMsg, WParam, LParam) ; Windows автоматически заполняет параметр, который мы будем использовать в функции обратного вызова... If uMsg = #WM_SIZE Select WParam Case #SIZE_MINIMIZED Debug "Окно было свёрнуто." Case #SIZE_RESTORED Debug "Окно было восстановлено." Case #SIZE_MAXIMIZED Debug "Окно было развернуто." EndSelect EndIf ProcedureReturn #PB_ProcessPureBasicEvents EndProcedure If OpenWindow(0, 0, 0, 200, 100, "Messages", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget) SetWindowCallback(@WinCallback()) ; активировать обратный вызов Repeat Select WaitWindowEvent() Case #PB_Event_CloseWindow End EndSelect ForEver EndIf
Пример:
В этом примере создаются две процедуры обратного вызова, для каждого окна по одной. Здесь тоже используются константы Windows API:; Значение параметров hWnd, uMsg, wParam и lParam смотрите в описании WinApi Procedure WinCallback1(hWnd, uMsg, wParam, lParam) ; Процедура обратного вызова для окна 1. If uMsg = #WM_COMMAND If lParam=ToolBarID(1) Debug wParam & $FFFF EndIf EndIf ProcedureReturn #PB_ProcessPureBasicEvents EndProcedure Procedure WinCallback2(hWnd, uMsg, wParam, lParam) ; Процедура обратного вызова для окна 2. If uMsg = #WM_COMMAND If lParam=ToolBarID(2) Debug wParam & $FFFF EndIf EndIf ProcedureReturn #PB_ProcessPureBasicEvents EndProcedure OpenWindow(1, #PB_Ignore, #PB_Ignore, 200, 30, "ToolBar 1", #PB_Window_SystemMenu ); Создание окна 1. If CreateToolBar(1, WindowID(1)) ; Создание панели управления для окна 1. ToolBarStandardButton(0, #PB_ToolBarIcon_New) ; Добавление кнопок к панели управления. ToolBarStandardButton(1, #PB_ToolBarIcon_Open) ToolBarStandardButton(2, #PB_ToolBarIcon_Save) EndIf SetWindowCallback(@WinCallback1(), 1) ; Привязка первой процедуры к окну 1, для перехвата событий окна 1. OpenWindow(2, #PB_Ignore, #PB_Ignore, 200, 30, "ToolBar 2", #PB_Window_SystemMenu ) If CreateToolBar(2, WindowID(2)) ToolBarStandardButton(3, #PB_ToolBarIcon_New) ToolBarStandardButton(4, #PB_ToolBarIcon_Open) ToolBarStandardButton(5, #PB_ToolBarIcon_Save) EndIf SetWindowCallback(@WinCallback2(), 2) ; Привязка второй процедуры к окну 2, для перехвата событий окна 2. Repeat Event = WaitWindowEvent() Until Event = #PB_Event_CloseWindow
Поддерживаемые OS
Windows