2010-08-13 2 views
1

Я пытаюсь получить весь прямоугольник прокручиваемого окна с помощью WIN32 API. Я думал, что GetClientRect вернет мне то, что мне нужно, но эта функция возвращает только текущий видовой экран. Есть ли специальный вызов функции, который возвращает всю область прокрутки как RECT или я должен позвонить GetScrollRange, чтобы рассчитать регион самостоятельно?Извлечь весь прямоугольник прокручиваемого окна

+0

Я никогда не испытывал 'GetClientRect', возвращающий ничего, кроме полного прямоугольника клиента, независимо от того, что перекрывает его или полностью ли он на экране. Ты уверен? –

ответ

4

Это не работает. Что касается Windows, прокручиваемое окно не является маленьким видовым окном в большую область, размеры которой вы можете установить или получить, это всего лишь прямоугольник с элементом управления прокруткой на краю. Вы должны определить внешний вид полосы прокрутки, вычислив часть условной области, которая видна в окне просмотра, предоставленном окном, и соответствующим образом нарисовать содержимое окна.

+0

Ах, спасибо за объяснение, теперь это имеет смысл. У меня было ошибочное впечатление, что клиентская область по существу была видовым экраном в более крупный регион, как в вашем примере. –

+0

На самом деле, существует несколько возможностей: из видового экрана на более крупный регион (один большой дочерний элемент управления, который перемещается), видовой экран на большую область (многие дети, все из которых перемещаются), виртуальный видовой экран (дочерние элементы управления создаются/уничтожаются по мере их появления), холст (рисунок происходит в активной области), или полоса прокрутки может быть только элементом управления ползунком, который не прокручивает ничего. –

+0

@Ben - Вы говорите о Win32? Звучит не так. –

2

Звучит так, как будто это конкретное окно использует виртуальную прокрутку. Даже GetScrollRange не обязательно укажет вам размеры, потому что нет требования, чтобы дельта 1 на полосе прокрутки равнялась 1 пикселю, на самом деле во многих случаях это одна запись, один ряд и т. Д.

Еще одна вещь, которую нужно попробовать - перечислить все дочерние окна и найти минимальные и максимальные координаты x и y (не забудьте указать ширину и высоту каждого дочернего окна). Конечно, это не поможет, если содержимое напрямую нарисовано, а не иерархия окон.

Смежные вопросы