Какие события можно использовать, чтобы уведомить элемент управления о том, что его часть покинула видимую область экрана? - PullRequest
0 голосов
/ 12 мая 2009

У меня есть userControl, для которого я рисую, и когда элемент управления перемещается к краю экрана или перемещается так, что панель задач Vista перекрывает его, край экрана / панель задач рисуется на элементе управления , оставляя уродливые линии над окрашиваемой областью контроля.

Каков наилучший способ обнаружить это и вызвать Invalidate для элемента управления? События «Moved» и «LocationChanged», очевидно, имеют дело с перемещением элемента управления в его родительском контейнере, а не с изменением местоположения экрана. Я верю, что то же самое произойдет, когда элемент управления перекрывается другим окном в Windows XP, но я еще не проверял это. Тот же вопрос применяется при этом обстоятельстве.

В настоящее время я рисую непосредственно в объекте Graphics элемента управления, который, по моему мнению, является корнем проблемы. Было бы лучше обратиться к BackGroundImage элемента управления в качестве попытки обойти эту проблему?

Примечание. Это существенная перефразировка предыдущего вопроса, который был сформулирован очень плохо. Я чувствовал, что нужно начинать новый вопрос, а не пытаться исправить чушь, которую я написал.

РЕДАКТИРОВАТЬ: Оказывается, что панель задач не вызывает проблемы, только нижний край экрана. Я думал, что панель задач также вызывает проблемы, но, похоже, я ошибся

Ответы [ 2 ]

2 голосов
/ 12 мая 2009

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

Вы пытаетесь нарисовать на обрезанной области ( Clip Rectangle ) графического объекта или используете всю его поверхность? Я думаю, что всякий раз, когда другое окно или объект скрывает другой объект, окна отправляют ему сообщение о перерисовке, и при этом оно проходит область, которую необходимо перерисовать (обрезать прямоугольник).

0 голосов
/ 13 мая 2009

При создании снимков экрана с ошибкой стало очевидно, что проблема заключалась в том, что я рисовал область, описанную ClipRectangle события Paint, а не ClipRectangle самого элемента управления.

ClipRectangle события Paint описывает область, которая раскрывается одним событием Movement, но не описывает область границ элемента управления. Мне просто удалось переместить элемент управления достаточно быстро, и стало очевидно, что весь элемент управления втягивается в открытое пространство. Я изменил код для рисования в области, соответствующей размеру элемента управления, и все работало нормально.

Еще один вопрос PEBKAC. Ну, по крайней мере, ошибка была найдена.

...