Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .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; (работает почему-то только частично в самых неожиданных местах (см. скриншот))

Формы, если что, растянуты на весь экран (по текущему разрешению экрана) и у них, само собой, нету бордеров. 
 smile 

ЗЫ. На скриншоте - кусочек игрового поля, внутри маленьких кружков форма прозрачна и виден текст в visual studio. Изначально форма белая, но почему-то перекрашивается в серую.

Автор: Enteropoly 16.7.2009, 17:49
Итак, если добавить в код отрисовки такое, например

Код

e.Graphics.FillRectangle(Brushes.White, 0, 0, 1000, 1000);


то форма будет прозрачна, но и весь функционал её как бы тоже "просвечивается", ибо кликнуть на такую форму нельзя совершенно. Не пойдёт.

-------------------

Ещё один апдейт. Если выставить Opacity = 0.01F, то форма будет прозрачно И сохранять функциональность! Но на такой форме всё равно нельзя рисовать...  smile 

-------------------

Я тут покурил и подумал... Что если тачскрин сделать с opacity = 0.01, а прозрачные слои для рисования закрывать прямоугольником с прозрачной заливкой такой, типа с добавлением другого цвета в процентах, и процент выставить тоже близким к нулю. Теоретически (!) должно заработать  smile  Но проверю позже =)  

А вообще на самом деле всё  может оказаться намного проще =)

Автор: Enteropoly 17.7.2009, 12:10
Да, всё оказалось намного проще =)

- У тачскрина делаем Opacity 0.01
- У прозрачных слоёв делаем BackColor, который не будет использоваться в рисовании (например Pink) и выставляется TransparencyKey = BackColor (или рисуется заполненный Pink'ом прямоугольник размером с форму перед основным рисованием). 
- При срабатывании эвента на тачксрине, райзим аналогичные эвенты на слоях. всё =)

Вот результат - прозрачный слой для рисования под тачскрином =)  smile

Спасибо за внимание  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)