Слежение за курсором мыши
Прикладные программы часто выполняют задачи, которые включают в себя слежение за позицией курсора мыши. Большинство рисующих приложений, например, отслеживает позицию курсора мыши в ходе операции рисования, разрешая пользователю рисовать в рабочей области окна при помощи перетаскивания мыши. Прикладные программы обработки текстов также отслеживают курсор, давая возможность пользователю выбрать слово или блок текста при помощи нажатия кнопки и протягивания мыши.
Слежение за курсором обычно включает в себя обработку сообщения WM_LBUTTONDOWN, WM_MOUSEMOVE и WM_LBUTTONUP. Окно выясняет, когда начать следить за курсором, проверяя его позицию, предоставляемую в параметре lParam сообщения WM_LBUTTONDOWN. Например, приложение обработки текстов должно начать следить за курсором, только в том случае, если встречается сообщение WM_LBUTTONDOWN в то время, когда курсор был на строке текста, но не тогда, если он был за пределами конца документа.
Окно отслеживает позицию курсора, обрабатывая поток сообщений WM_MOUSEMOVE, посылаемых в окно как перемещения мыши. Обработка сообщения WM_MOUSEMOVE обычно вызывает повторную операцию окрашивания или рисования в рабочей области. Например, рисующее приложение может перерисовать линию повторно, как только передвинется мышь. Окно использует сообщение WM_LBUTTONUP как сигнал, чтобы прекратить следить за курсором.
Кроме того, прикладная программа может вызвать функцию TrackMouseEvent, чтобы получить систему, отправляющую другие сообщения, которые являются полезными для того, чтобы следить за курсором. Система посылает сообщение WM_MOUSEHOVER, когда курсор нависает над рабочей областью на некоторый периода времени. Она посылает сообщение WM_MOUSELEAVE, когда курсор оставляет рабочую область. Сообщения WM_NCMOUSEHOVER и WM_NCMOUSELEAVE - соответствующие сообщения для нерабочих областей.