Всякий раз, когда происходит событие от нажатия кнопки мыши, система отправляет сообщение WM_NCHITTEST или в окно, которое содержит острие курсора, или в окно, которое захватило мышь. Система использует это сообщение, чтобы решить, какое отправлять сообщение мыши из рабочей или из нерабочей области. Приложение, которое должно получать сообщения о перемещении и о кнопках мыши, должно передать сообщение WM_NCHITTEST в функцию DefWindowProc.
Параметр lParam сообщения WM_NCHITTEST содержит экранные координаты острия курсора. Функция DefWindowProc проверяет эти координаты и возвращает значение местоположения курсора, которое указывает место острия. Значение местоположения курсора может быть одним из ниже перечисленных значений.
Значение | Местоположение острия курсора |
---|---|
HTBORDER | В границах окна, которое не имеет рамки установки размеров окна. |
HTBOTTOM | На горизонтальной нижней рамке окна. |
HTBOTTOMLEFT | В левом нижнем угле рамки окна. |
HTBOTTOMRIGHT | В правом нижнем угле рамки окна. |
HTCAPTION | В области заголовка. |
HTCLIENT | В рабочей области. |
HTCLOSE | На кнопке Закрыть (Close). |
HTERROR | На экранном фоне или на разделительной линии между окнами (то же самое, что и HTNOWHERE, за исключением того, что функция DefWindowProc создает системный звуковой сигнал, чтобы обратиться внимание на ошибку). |
HTGROWBOX | На блоке управления размером (то же самое, что и HTSIZE). |
HTHELP | На кнопке Справка (Help). |
HTHSCROLL | На горизонтальной линейке прокрутки. |
HTLEFT | На левой рамке окна. |
HTMENU | В меню. |
HTMAXBUTTON | На кнопке развертывания окна (Maximize). |
HTMINBUTTON | На кнопке свертывания окна (Minimize). |
HTNOWHERE | На экранном фоне или на разделительной линии между окнами. |
HTREDUCE | На кнопке свертывания окна (Minimize). |
HTRIGHT | На правой рамке окна. |
HTSIZE | На блоке управления размером (то же самое, что и HTGROWBOX). |
HTSYSMENU | В Системном меню или на кнопке Закрыть (Close) в дочернем окне. |
HTTOP | На горизонтальной верхней рамке окна. |
HTTOPLEFT | На левом верхнем угле рамки окна. |
HTTOPRIGHT | На правом верхнем угле рамки окна. |
HTTRANSPARENT | В окне, в текущий момент закрытом другим окном того же самого потока. |
HTVSCROLL | На вертикальной линейке прокрутки. |
HTZOOM | На кнопке развертывания окна (Maximize).. |
Если курсор находится в рабочей области окна, DefWindowProc возвращает значение местоположения курсора HTCLIENT оконной процедуре. Когда оконная процедура возвращает этот код системе, система преобразует экранные координаты острия курсора в рабочие координаты окна, а затем посылает соответствующее сообщение мыши из рабочей области.
Функция DefWindowProc возвращает друг за другом значения местоположения курсора, когда острие курсора находится в нерабочей области окна. Когда оконная процедура возвращает одно из этих значений местоположения курсора, система посылает сообщение мыши из нерабочей области, помещая значение местоположения курсора в параметре wParam сообщения, а координаты курсора в параметре lParam.