Описание функции


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