Когда происходит событие мыши, система обычно помещает сообщение мыши в окно, которое содержит острие курсора. Приложение может изменить этот режим работы, используя функцию SetCapture, чтобы перенаправить сообщения мыши в конкретное окно. Это окно получает все сообщения мыши до тех пор, пока программа не вызовет функцию ReleaseCapture, или пока не задаст другое окно захвата, или пока пользователь не щелкнет по окну, созданному другим потоком.
Когда изменяется захват мыши, система отправляет сообщение WM_CAPTURECHANGED в окно, которое теряет захват мыши. Параметр lParam этого сообщения устанавливает дескриптор окна, которое получает захват мыши.
Только высокоприоритетное окно может захватить ввод данных от мыши. Когда фоновое окно пытается захватить ввод данных от мыши, оно получает сообщения только для событий мыши, которые происходят, когда острие курсора - внутри видимой части окна.
Захват ввода данных от мыши применяется в том случае, если окно получает весь ввод данных от мыши, даже когда курсор перемещается за пределами окна. Например, приложение обычно отслеживает позицию курсора после события нажатия кнопки мыши, следуя за курсором до тех пор, пока не произойдет событие отпуска кнопки мыши. Если приложение не захватывало ввод данных от мыши, а пользователь отпускает кнопку мыши, за пределами окна, окно не получает сообщение об отпуске кнопки.
Поток может использовать функцию GetCapture, чтобы выяснить, захватило ли мышь одно из его окон. Если одно из окон потока захватило мышь, GetCapture извлекает дескриптор этого окна.