2009-05-12 2 views
0

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

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

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

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

EDIT: Оказывается, панель задач не вызывает проблемы, а только край нижнего экрана. Я думал, что панель задач также вызывает проблемы, но похоже, что я ошибся

+0

Я скопирую комментарий из вашего первого вопроса: как вы делаете свою живопись и почему на панели задач возникает проблема? Обычно ваш контроль не должен волновать, если какое-то другое окно выходит поверх него. –

+0

, когда элемент управления перемещается к краю экрана или перемещается так, что панель задач Vista перекрывает его, край края панели/панели задач обращается к элементу управления, оставляя уродливые линии над областью, покрываемой краской элемента управления. Я делаю свою картину в методе OnPaint. Когда другие формы передают мой контроль, нет видимых проблем, по крайней мере в Vista, но когда элемент управления достигает края экрана или панели задач, край экрана опирается на мой элемент управления. Я буду работать над получением скриншотов. – Frosty840

ответ

2

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

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

0

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

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

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

+0

Ответ на повторный ответ Я понял, что это на самом деле правильно. Я неправильно понял «прямоугольник клипа» как «клиентский прямоугольник». – Frosty840

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