2010-11-01 8 views
2

Я хотел бы определить, является ли прямоугольник внутри окна полностью видимым.Определить, видно ли прямоугольное внутреннее окно

Я нашел RectVisible, но эта функция определяет, видима ли какая-либо часть прямоугольника, я хочу знать, видима ли всего прямоугольника.

Есть ли какая-либо функция для этого?

ответ

1

Сначала получите область отсечения системы (видимую область окна) в область, используя GetRandomRgn. Подробнее о «системном регионе» here. Затем смещайте эту область, так как она находится в экранных координатах (в статье, на которую я ссылался, есть пример). После этого создайте область из вашего прямоугольника с помощью CreateRectRgn и объедините части своей области прямоугольника с теми, которые не входят в «область системы»: это вызывает CombineRgn, передавая область прямоугольника в качестве первой области, а система область как вторая область и RGN_DIFF как fnCombineMode. Если результат равен NULLREGION, тогда ваш прямоугольник будет полностью виден - он не полностью или частично не закрыт ни одним окном (верхний уровень или нет), либо он не полностью или частично не отображается.

В целом, есть вероятность, что вы приближаетесь к своей проблеме неправильно. Если вы сказали, что вы пытаетесь добиться, кто-то, возможно, предложит более простой подход.

+0

Havn't попробовал еще, но это выглядит многообещающе, спасибо! – ManyMen

+0

В Windows 7 «область системы» всегда точно такая же, как область прямоугольника, даже если окно закрыто другими окнами или вне экрана. – Basilevs

1

Можете ли вы сделать простое сравнение, используя координаты окна и прямоугольника.

Проверьте левую ординату прямоугольника справа от левой границы окна; правая ордината находится слева от правой границы окна; и аналогичные для верхней и нижней?

Единственная морщина может быть, если вы используете как логические, так и физические координаты, и в этом случае вам потребуется выполнить преобразование.

1

Используйте PtVisible на каждом углу прямоугольника.

Функция PtVisible определяет, является ли указанной точкой в ​​пределах вырезанной областью устройства контекста.

+0

Это будет работать большую часть времени, но вы не можете быть уверены, что что-то не покрывает внутреннюю часть прямоугольника. Окно меньше, чем прямоугольник может быть помещен в окно окна, которое мне нужно проверить. – ManyMen