Функция WM_NCHITTEST

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


WM_NCHITTEST

Сообщение выполняется при скольжении курсора мыши в окне.

Параметры

Указанные параметры передаются системой.
$wParam -
$lParam Двойное слово содержит:
    младшее слово = X-координата мыши относительно клиентской области окна
    старшее слово = Y-координата мыши относительно клиентской области окна

Примечания

Смотрите функцию GUIRegisterMsg.
Выполняется в активном и не активном окне. Возвращает код элемента, над которым находится курсор.

Пример

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Global $assot[19][2] = [ _
[1, '1 - Клиентская область'], _
[2, '2 - Заголовок'], _
[3, '3 - Иконка'], _
[5, '5 - Меню'], _
[6, '6 - Горизонтальная прокрутка'], _
[7, '7 - Вертикальная прокрутка'], _
[8, '8 - Свернуть'], _
[9, '9 - Развернуть'], _
[10, '10 - Левый грань'], _
[11, '11 - Правая грань'], _
[12, '12 - Верхняя грань'], _
[13, '13 - Левый верхний угол'], _
[14, '14 - Правый верхний угол'], _
[15, '15 - Нижняя грань'], _
[16, '16 - Левый нижний угол'], _
[17, '17 - Правый нижний угол'], _
[18, '18 - Рамка'], _ ; если стиль без возможности изменения размера окна (-1)
[20, '20 - Закрыть'], _
[21, '21 - Знак вопроса']]

Global $k = 0

$Gui = GUICreate("WM_NCHITTEST", 350, 100, -1, -1, BitOR($WS_OVERLAPPEDWINDOW, $WS_HSCROLL, $WS_VSCROLL), $WS_EX_TOPMOST)
GUISetBkColor(0xdadabd)
$iFileMenu = GUICtrlCreateMenu("&Файл")
$iFileItem = GUICtrlCreateMenuItem("Открыть", $iFileMenu)
GUIRegisterMsg($WM_NCHITTEST, 'WM_NCHITTEST')
GUISetState()

Do
Until GUIGetMsg() = -3

Func WM_NCHITTEST($hWnd, $Msg, $wParam, $lParam)
    Local $info_ID, $iProc, $X, $Y
    $iProc = DllCall('user32.dll', 'int', 'DefWindowProc', 'hwnd', $hWnd, 'int', _
            $Msg, 'wparam', $wParam, 'lparam', $lParam)
    $k += 1
    ; Координаты мыши
    $X = BitAND($lParam, 0xFFFF) ; _WinAPI_LoWord
    $Y = BitShift($lParam, 16) ; _WinAPI_HiWord
   
    WinSetTitle($Gui, '', 'Вызов ' & $k & ' раз, x=' & $X & ', y=' & $Y)
    ; Возвращаемый массив $iProc содержит 5 значений, первое из которых код указывающий над каким элементом окна находится мышь остальные повторяют параметры $hWnd, $Msg, $wParam, $lParam
    $info_ID = '?'
    For $i = 0 To 18
        If $iProc[0] = $assot[$i][0] Then
            $info_ID = $assot[$i][1]
            ExitLoop
        EndIf
    Next
    ToolTip($info_ID) ; просмотр возвращаемых параметров
    ; Если мышь в клиентской области то возвращаем окну, что мышь на заголовке (это позволяет перемещать окно за клиентскую область)
    If $iProc[0] = $HTCLIENT Then Return $HTCAPTION
    ; If $iProc[0] = $HTCLOSE Then Exit ; Выход при наведении на кнопку закрытия
    ; If $iProc[0] = $HTCLIENT Then Return $HTBOTTOMRIGHT ; а здесь возвращаем окну, что мышь готова изменить размер
    Return $GUI_RUNDEFMSG
EndFunc