Я никогда не делал этого, но я бы начал с рассмотрения местоположения щелчка мыши. Тогда я мог бы выяснить, насколько далеко по всей протяженности трекбара щелкнул щелчок и установил местоположение трекера в этом месте.
Я начал бы с рассмотрения переопределения управления и управления функциями события, связанными с мышами (OnMouseDown()
, например). Обратите внимание, что в некоторых случаях может быть важно вызвать реализацию базового класса переопределенной функции, обязательно рассмотрите ее в каждом конкретном случае. (Я просто испугался этого, так что это свежо в моем сознании.)
Обратите внимание, что вы должны изменить поведение стандартных элементов управления таким образом, если у вас есть очень убедительная причина. Они являются стандартными, потому что они ведут себя предсказуемым образом во многих сотнях/тысячах программ. Сделать что-то по-другому, просто для вашей программы может нарушить Principle of Lease Astonishment. Единственный трек-бэк, который я могу думать о том, что я ожидаю, что буду вести себя так, как вы описываете, - это какой-то медиаплеер.
Редактировать: Основываясь на ваших комментариях, да, я думаю, у вас есть веская причина. :)
Поведение по умолчанию заключается в том, что поле трека перемещает расстояние, заданное «LargeChange», а не половину расстояния между полем и щелчком. –
Спасибо за информацию, я никогда не понимал, что она делает, я всегда думал, что это немного случайно. –