Шаг 44 - Захват мыши

Захват мыши является стандартной техникой для программ рисования или операций перетаскивания. Кроме этого захват мыши используется для обеспечения обязательного завершения обработки сообщения. Рассмотрим простой пример. Ваша программа должна по нажатию на левую кнопку мыши начать рисовать линию. В течении движения курсора линия должна тянуться за курсором и после его нажатия должна закончиться. У нас есть три сообщения:

Мышь нажата 
Мышь движется 
Мышь отпущена

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

Для того, чтобы гарантировать, что любой ввод будет произведен в окно нужно вызвать функцию SetCapture()

HWND SetCapture
( 
	HWND hWnd		//Дескриптор окна
);

После вызова этой функции все сообщений от мыши будут идти в это окно. Для отмены захвата фокуса необходимо вызвать функцию ReleaseCapture():

BOOL ReleaseCapture(VOID);

Эта функция отменяет захват мыши окном.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 1.01.2001