В течение первых двух десятилетий существования Windows элемент управления полосой прокрутки имел всего несколько базовых операций. (Для наглядности предположим, что полоса прокрутки вертикальная.) Существуют пять целей для мыши: стрелки на концах полосы прокрутки прокручивают по строке. Области между «ползунком» (thumb) и стрелками прокручивают по странице. А сам ползунок позволяет перетаскивать полосу прокрутки в конкретное положение.
В Windows 2000 к полосе прокрутки было добавлено контекстное меню по правому щелчку. Это меню давало четыре опции, соответствовавшие уже существующим операциям мышью, две опции, соответствовавшие уже существующим операциям с клавиатуры, и одну новую операцию.
Интересная новая опция — «Прокрутить сюда» (Scroll Here): вы можете щелкнуть правой кнопкой прямо в том месте, куда хотите прокрутить, а затем выбрать «Прокрутить сюда». Это гораздо удобнее, если нужно прокрутить на большое расстояние, поскольку не требуется захватывать ползунок и тянуть его до нужного места. Можно просто сфокусироваться на том месте, куда хотите попасть, а не на том, откуда вы двигаетесь.
Я часто использовал это контекстное меню, когда нужно было прыгнуть на большие расстояния.
В то же время была добавлена ещё более скрытая горячая клавиша: удерживая Shift при щелчке по полосе прокрутки, ползунок сразу перескакивает в то место, по которому вы кликнули.
Я не знал об этой горячей клавише до недавнего времени. Я всегда пользовался своим надёжным контекстным меню.
К сожалению, почти никто больше не использует полосы прокрутки Win32. Все применяют фреймворки, которые предоставляют собственные пользовательские полосы прокрутки.
Electron и другие веб-приложения используют полосу прокрутки Chromium, которая не реализует контекстное меню, но, по крайней мере, поддерживает сочетание Shift+клик.
Фреймворк WPF XAML, по-видимому, реализует и контекстное меню, и Shift+клик.
Фреймворк WinUI XAML, к сожалению, не поддерживает ни контекстное меню, ни сочетание Shift+клик. (Хотя, по крайней мере, один человек уже запросил эту функцию.)
Фреймворк Qt имеет несколько точек настройки, поэтому многое зависит от разработчика конкретного приложения. Можно включить контекстные меню с помощью SH_ScrollBar_ContextMenu, можно включить «левый клик для перехода к позиции» с помощью SH_ScrollBar_LeftClickAbsolutePosition, и можно включить «средний клик для перехода к позиции» с помощью SH_ScrollBar_MiddleClickAbsolutePosition.
Отлично, значит к тому моменту, когда я узнал о сочетании клавиш для полос прокрутки (Shift+клик), экосистема раздробилась настолько, что я уже не могу полагаться на его работу повсеместно.
Рэймонд участвовал в развитии Windows более 30 лет. В 2003 году он создал веб-сайт под названием The Old New Thing, который стал популярнее, чем он мог себе представить, и это развитие до сих пор вызывает у него смятение. Сайт породил книгу с тем же названием (Addison Wesley, 2007). Он время от времени появляется в аккаунте Windows Dev Docs в Twitter, рассказывая истории, которые не несут полезной информации.
Обсуждение закрыто. Войдите в систему, чтобы редактировать/удалять существующие комментарии.
Жаль, что Win32 играет всё меньшую роль в Windows (особенно если это не связано с официально поддерживаемым WinUI 3), но забавно, что существуют сторонние реализации, которые как-то сохранили поведение Shift+клик. Могу добавить, что Firefox, похоже, не использует стандартную полосу прокрутки (нет контекстного меню), но сочетание всё ещё работает!
Чёрт, я использую Windows 30 лет и только что узнал о Shift+клик… и о контекстном меню*!
* Я только что попробовал в Проводнике Windows 11. В Edge не работает, однако.
Ваш комментарий ожидает модерации.
Использую Windows более двух десятков лет и понятия не имел про Shift+клик на полосе прокрутки — спасибо!
При работе с Win32 FILETIME не забывайте, что у вас теперь есть std::chrono
Нет, серьёзно, вам нужно передавать все необработанные сообщения в DefWindowProc, часть 2
