Сообщение Re[5]: У престарелых скуфных кнопкодавов реально дофига обид от 10.10.2025 8:43
Изменено 10.10.2025 8:48 Философ
S>Возможно дело в нас — мы не умеем использовать инструмент.
Расскажи нам, как использовать инструмент — очень хотелось бы чтобы не врал. Вот, например:
Что не так в этой функции? Мне кажется, она неверно получает прямоугольник с вертикальным скроллбаром.
RECT GetVerticalScrollBarRect(HWND hwnd) { RECT clientRect; GetClientRect(hwnd, &clientRect); RECT scrollRect = clientRect; scrollRect.left = scrollRect.right - GetSystemMetrics(SM_CXVSCROLL); return scrollRect; }
Почему дипсик в ответе чушь выдаёт?
Функция не учитывает рамки окна и может получать некорректные координаты. Вертикальный скроллбар находится в клиентской области, но координаты клиентского rect начинаются с (0,0). Для правильной работы нужно преобразовать координаты в экранные или оконные:...
...
...
...
По какой причине, когда ты его потом спрашиваешь "Действительно ли вертикальный скроллбар находится в клиенской области?", он говорит правду?
**Нет, вертикальный скроллбар находится в НЕклиентской области окна.**
Скроллбары являются частью неклиентской области, так же как:
— заголовок окна (title bar)
— рамки (borders)
— меню (menu bar)
— кнопки minimize/maximize/close
**Клиентская область** — это внутренняя часть окна, где отрисовывается содержимое приложения.
**Неклиентская область** — это все системные элементы управления окном, включая скроллбары.
Поэтому ваша исходная функция, которая использует `GetClientRect()`, не сможет правильно получить прямоугольник скроллбара. Нужно использовать `GetWindowRect()` и работать с координатами всего окна.
Помогут ли платные опции?
Это, блин, не физика, о которой я тут ранее говорил. Не электроника — даже Влад признал, что в электронике они слабоваты. Это почти наверняка было не раз на SO — он это должен был знать.
Так что мне сделать, чтобы он не врал, чтобы не выдавал видимость решения? Научи.
S>Возможно дело в нас — мы не умеем использовать инструмент.
Расскажи нам, как использовать инструмент — очень хотелось бы чтобы не врал. Вот, например:
Что не так в этой функции? Мне кажется, она неверно получает прямоугольник с вертикальным скроллбаром.
RECT GetVerticalScrollBarRect(HWND hwnd) { RECT clientRect; GetClientRect(hwnd, &clientRect); RECT scrollRect = clientRect; scrollRect.left = scrollRect.right - GetSystemMetrics(SM_CXVSCROLL); return scrollRect; }
Почему дипсик в ответе чушь выдаёт?
Функция не учитывает рамки окна и может получать некорректные координаты. Вертикальный скроллбар находится в клиентской области, но координаты клиентского rect начинаются с (0,0). Для правильной работы нужно преобразовать координаты в экранные или оконные:...
...
...
...
По какой причине, когда ты его потом спрашиваешь "Действительно ли вертикальный скроллбар находится в клиенской области?", он говорит правду?
**Нет, вертикальный скроллбар находится в НЕклиентской области окна.**
Скроллбары являются частью неклиентской области, так же как:
— заголовок окна (title bar)
— рамки (borders)
— меню (menu bar)
— кнопки minimize/maximize/close
**Клиентская область** — это внутренняя часть окна, где отрисовывается содержимое приложения.
**Неклиентская область** — это все системные элементы управления окном, включая скроллбары.
Поэтому ваша исходная функция, которая использует `GetClientRect()`, не сможет правильно получить прямоугольник скроллбара. Нужно использовать `GetWindowRect()` и работать с координатами всего окна.
Помогут ли платные опции?
Это, блин, не физика, о которой я тут ранее говорил. Не электроника — даже Влад признал, что в электронике они слабоваты. Это почти наверняка было не раз на SO — он это должен был знать.
Так что мне сделать, чтобы он не врал, чтобы они не врали, чтобы не выдавали видимость решения? Научи.
Самое главное, чтобы не выдавали видимость решения — чтобы мне не приходилось вычитывать код, а потом его руками править.
Проблема в том, что про Win API я знаю, проскроллбары знаю, про окна, про клиенскую-неклиенскую области. Кое-что из электроники знаю, кое-что из физики. Но я не всё знаю — кое-где мне знаний не хватает, не могу проверить его решение. И это меня дико напрягает.