Гладкие края непрямоугольной формы в .NET

Я создал форму с закругленными углами, используя Form.Region. Это работает, но, к сожалению, округление выглядит грубым. Есть ли какие-то хитрости для сглаживания углов такой формы? Я знаю, что многие приложения поддерживают это, просто не знаю, как это сделать в .NET.

Спасибо, парни.


person SharpAffair    schedule 18.01.2011    source источник
comment
Техника, которую вы ищете, широко известна как сглаживание.   -  person enriquein    schedule 18.01.2011


Ответы (2)


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

Лучше всего сделать радиус угла маленьким, чтобы он не был так заметен. Также используйте такой инструмент, как ZoomIt от SysInternals, и внимательно посмотрите на закругленные углы такой программы, как Windows Media Player. Обратите внимание на серые тона, которые он использует для рисования границы.

person Hans Passant    schedule 18.01.2011

Из того, что я читал в Интернете, большинство людей в конечном итоге переопределяют события формы onpaint и рисуют там регион. Это позволяет им использовать GDI+ со сглаживанием и сделать его более чистым.

Примеры, которые я нашел:

http://netcode.ru/dotnet/?lang=&katID=30&skatID=283&artID=7833 http://www.xtremevbtalk.com/showthread.php?t=288178

person Peter    schedule 18.01.2011