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