Описание функции
WM_NCHITTEST
Сообщение выполняется при скольжении курсора мыши в окне.
Параметры
Указанные параметры передаются системой.wParam | - |
lParam |
Двойное слово содержит: младшее слово = X-координата мыши относительно клиентской области окна старшее слово = Y-координата мыши относительно клиентской области окна |
Примечания
Смотрите функцию SetWindowCallback.Пример
Declare MyWindowCallback(WindowId, Message, wParam, lParam)
Global Dim Assot.s(21)
; задаём значения, ассоциируя число с текстом подсказки
Assot(1) = "1 - Клиентская область"
Assot(2) = "2 - Заголовок"
Assot(3) = "3 - Иконка"
Assot(5) = "5 - Меню"
Assot(6) = "6 - Горизонтальная прокрутка"
Assot(7) = "7 - Вертикальная прокрутка"
Assot(8) = "8 - Свернуть"
Assot(9) = "9 - Развернуть"
Assot(10) = "10 - Левый грань"
Assot(11) = "11 - Правая грань"
Assot(12) = "12 - Верхняя грань"
Assot(13) = "13 - Левый верхний угол"
Assot(14) = "14 - Правый верхний угол"
Assot(15) = "15 - Нижняя грань"
Assot(16) = "16 - Левый нижний угол"
Assot(17) = "17 - Правый нижний угол"
Assot(18) = "18 - Рамка" ; если стиль без возможности изменения размера окна (-1)
Assot(20) = "20 - Закрыть"
Assot(21) = "21 - Знак вопроса"
Global k = 0
OpenWindow(0, 0, 0, 780, 100,"WM_NCHITTEST", #WS_EX_TOPMOST | #WS_HSCROLL | #WS_VSCROLL | #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget)
SetWindowColor(0, $bddada)
If CreateMenu(0, WindowID(0)) ; Здесь начинается создание меню....
MenuTitle("Файл")
MenuItem(1, "Открыть")
EndIf
SetWindowCallback(@MyWindowCallback())
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Procedure MyWindowCallback(WindowId, Message, wParam, lParam)
Protected Result = #PB_ProcessPureBasicEvents, info_ID.s, iProc, X, Y
Select Message
Case #WM_NCHITTEST
iProc = DefWindowProc_(WindowId, Message, wParam, lParam)
k + 1
; Координаты мыши
X = lParam & $FFF ; LoWord
Y = lParam >> 16 ; HiWord
; Возвращаемый массив iProc содержит 5 значений, первое из которых код указывающий над каким элементом окна находится мышь остальные повторяют параметры hWnd, Msg, wParam, lParam
info_ID = "?"
For i = 0 To 18
If iProc = i ; iProc(0)
info_ID = Assot(i)
Break
EndIf
Next
; ToolTip(info_ID) ; просмотр возвращаемых параметров (перенаправил в заголовок)
SetWindowTitle(0 , "Вызов " + k + " раз, x=" + X + ", y=" + Y + " код=" + info_ID)
; Если мышь в клиентской области то возвращаем окну, что мышь на заголовке (это позволяет перемещать окно за клиентскую область)
If iProc = #HTCLIENT ; iProc(0)
ProcedureReturn #HTCAPTION
EndIf
; If iProc = #HTCLOSE
; End ; Выход при наведении на кнопку закрытия
; EndIf
; If iProc = #HTCLIENT
; ProcedureReturn HTBOTTOMRIGHT ; а здесь возвращаем окну, что мышь готова изменить размер
; EndIf
EndSelect
ProcedureReturn Result
EndProcedure