Определите, виден ли прямоугольник внутри окна - PullRequest
2 голосов
/ 01 ноября 2010

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

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

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

Ответы [ 3 ]

2 голосов
/ 01 ноября 2010

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

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

2 голосов
/ 02 ноября 2010

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

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

1 голос
/ 01 ноября 2010

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

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

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

...