Поделиться через


сообщение WM_NCHITTEST

Отправляется в окно, чтобы определить, какая часть окна соответствует определенной координате экрана. Это может произойти, например, при перемещении курсора, нажатии или освобождении кнопки мыши или в ответ на вызов функции, например WindowFromPoint. Если мышь не захвачена, сообщение отправляется в окно под курсором. В противном случае сообщение отправляется в окно, которое захватило мышь.

Окно получает это сообщение через функцию WindowProc .

#define WM_NCHITTEST                    0x0084

Параметры

wParam

Этот параметр не используется.

lParam

Слово с низким порядком указывает координату x курсора. Координата относительно левого верхнего угла экрана.

Слово с высоким порядком задает координату курсора y. Координата относительно левого верхнего угла экрана.

Возвращаемое значение

Возвращаемое значение функции DefWindowProc является одним из следующих значений, указывая положение горячей точки курсора.

Возврат кода или значения Description
H ТБ ORDER
18
В границе окна, у которых нет границы размера.
H ТБ OTTOM
15
В нижней горизонтальной границе окна с изменением размера (пользователь может щелкнуть мышь, чтобы изменить размер окна по вертикали).
H ТБ OTTOMLEFT
16
В левом нижнем углу границы окна с изменением размера (пользователь может щелкнуть мышь, чтобы изменить размер окна по диагонали).
H ТБ OTTOMRIGHT
17
В правом нижнем углу границы окна с изменением размера (пользователь может щелкнуть мышь, чтобы изменить размер окна по диагонали).
HTCAPTION
2
В строке заголовка.
HTCLIENT
1
В клиентской области.
HTCLOSE
20
В кнопке "Закрыть ".
HTERROR
-2
В фоновом режиме экрана или в разделительной строке между окнами (аналогично HTNOWHERE, за исключением того, что функция DefWindowProc создает системный сигнал для указания ошибки).
HTGROWBOX
4
В поле размера (аналогично HTSIZE).
HTHELP
21
В кнопке справки.
HTHSCROLL
6
На горизонтальной полосе прокрутки.
HTLEFT
10
В левой границе окна с изменением размера (пользователь может щелкнуть мышь, чтобы изменить размер окна по горизонтали).
HTMENU
5
В меню.
HTMAXBUTTON
9
В кнопке "Развернуть ".
HTMINBUTTON
8
В кнопке "Свернуть ".
HTNOWHERE
0
В фоновом режиме экрана или на разделительной линии между окнами.
HTREDUCE
8
В кнопке "Свернуть ".
HTRIGHT
11
В правой границе окна с изменением размера (пользователь может щелкнуть мышь, чтобы изменить размер окна по горизонтали).
HTSIZE
4
В поле размера (аналогично HTGROWBOX).
HTSYSMENU
3
В меню окна или в кнопке "Закрыть " в дочернем окне.
HTTOP
12
В верхней горизонтальной границе окна.
HTTOPLEFT
13
В левом верхнем углу границы окна.
HTTOPRIGHT
14
В правом верхнем углу границы окна.
HTTRANSPARENT
-1
В окне, которое в настоящее время охватывает другое окно в том же потоке (сообщение будет отправлено в базовые окна в одном потоке, пока один из них не возвращает код, который не является HTTRANSPARENT).
HTVSCROLL
7
В вертикальной полосе прокрутки.
HTZOOM
9
В кнопке "Развернуть ".

Замечания

Используйте следующий код для получения горизонтальной и вертикальной позиции:

xPos = GET_X_LPARAM(lParam); 
yPos = GET_Y_LPARAM(lParam);

Как отмечалось выше, координата x находится в низком порядке, чем возвращаемое значение; координата y находится в коротком формате высокого порядка (оба представляют подписанные значения, так как они могут принимать отрицательные значения в системах с несколькими мониторами). Если возвращаемое значение назначено переменной, можно использовать макрос MAKEPOINTS для получения структуры POINTS из возвращаемого значения. Вы также можете использовать макрос GET_X_LPARAM или GET_Y_LPARAM для извлечения координат x-или y.

Важно!

Не используйте макросы LOWORD или HIWORD для извлечения координат x-и y позиции курсора, так как эти макросы возвращают неверные результаты в системах с несколькими мониторами. Системы с несколькими мониторами могут иметь отрицательные координаты x и y, а LOWORD и HIWORD обрабатывают координаты как неподписанные количества.

Windows Vista: при создании пользовательских кадров, включающих стандартные кнопки подпись, сначала необходимо передать это сообщение в функцию DwmDefWindowProc. Это позволяет диспетчеру окон рабочего стола (DWM) предоставлять тестирование попаданий для кнопок подпись. Если DwmDefWindowProc не обрабатывает сообщение, может потребоваться дальнейшая обработка WM_NCHITTEST .

Requirements

Требование Значение
Минимальная версия клиента
Windows 2000 Professional [только классические приложения]
Минимальная версия сервера
Windows 2000 Server [только классические приложения]
Верхний колонтитул
Winuser.h (включая Windowsx.h)

См. также

Ссылка

DefWindowProc

GET_X_LPARAM

GET_Y_LPARAM

Концептуальной

Ввод с помощью мыши

Другие ресурсы

MAKEPOINTS

ТОЧКИ