Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > .NET для новичков > Прозрачный задник формы |
Автор: Enteropoly 16.7.2009, 17:19 |
Что-то я покопался в инете, но проблему не решил. Итак... Для своей игры я хочу использовать такую штучку: 3 слоя рисования + "Тачскрин". Для этого мне потребуется 4 формы одинакового размера. Самая нижняя форма (слой рисования 3) делается непрозрачной, остальные три над ней (слои рисования 2, 1 и тачскрин) - прозрачными. Тачскрин берёт на себя все функции по кликам, скроллам и.т.п., а 3 формы под ним только отрисовывают происходящее (в отдельных потоках). Вопрос таков: как мне сделать форму прозрачной, но в то же время рисовать на ней через Control.Graphics вполне себе непрозрачные квадратики-кружочки? Много что перепробовал, пока безрезультатно... Тестил, к примеру: - Различные TransparencyKey и Backcolor (не работает) - this.SetStyle(ControlStyles.SupportsTransparentBackColor, true); this.SetStyle(ControlStyles.UserPaint, true); this.BackColor = Color.Transparent; (работает почему-то только частично в самых неожиданных местах (см. скриншот)) Формы, если что, растянуты на весь экран (по текущему разрешению экрана) и у них, само собой, нету бордеров. ![]() ЗЫ. На скриншоте - кусочек игрового поля, внутри маленьких кружков форма прозрачна и виден текст в visual studio. Изначально форма белая, но почему-то перекрашивается в серую. |
Автор: Enteropoly 16.7.2009, 17:49 | ||
Итак, если добавить в код отрисовки такое, например
то форма будет прозрачна, но и весь функционал её как бы тоже "просвечивается", ибо кликнуть на такую форму нельзя совершенно. Не пойдёт. ------------------- Ещё один апдейт. Если выставить Opacity = 0.01F, то форма будет прозрачно И сохранять функциональность! Но на такой форме всё равно нельзя рисовать... ![]() ------------------- Я тут покурил и подумал... Что если тачскрин сделать с opacity = 0.01, а прозрачные слои для рисования закрывать прямоугольником с прозрачной заливкой такой, типа с добавлением другого цвета в процентах, и процент выставить тоже близким к нулю. Теоретически (!) должно заработать ![]() А вообще на самом деле всё может оказаться намного проще =) |
Автор: Enteropoly 17.7.2009, 12:10 |
Да, всё оказалось намного проще =) - У тачскрина делаем Opacity 0.01 - У прозрачных слоёв делаем BackColor, который не будет использоваться в рисовании (например Pink) и выставляется TransparencyKey = BackColor (или рисуется заполненный Pink'ом прямоугольник размером с форму перед основным рисованием). - При срабатывании эвента на тачксрине, райзим аналогичные эвенты на слоях. всё =) Вот результат - прозрачный слой для рисования под тачскрином =) ![]() Спасибо за внимание ![]() |