C # Прозрачные панели? - PullRequest
       36

C # Прозрачные панели?

0 голосов
/ 25 октября 2018

, поэтому я бросаю себе вызов, создавая игровой движок с использованием GDI.

До сих пор мне удавалось сделать несколько игр с использованием GDI - однако недавно я столкнулся с проблемой, которую хотел бынекоторая помощь.

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

Вопрос: есть ли способ сделать прозрачную панель для метода Paint?

Я попытался установитьцвет от прозрачного до прозрачного, но это только делает панель черной.

1 Ответ

0 голосов
/ 25 октября 2018

Я не могу указать на источник для этого, но я провел некоторое тестирование сейчас, и мое объяснение следующее:

Когда я устанавливаю BackgroundColor панели в Colors.FromArgb (50,0,0,0) тогда это работало, потому что всякий раз, когда я менял цвет фона формы, на которой живет панель, цвет панели просвечивал сквозь панель.

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

Вы должны написать свой собственный элемент управления:

  public class TransparentPanel : Panel
  {
    protected override CreateParams CreateParams
    {
      get
      {
        var cp = base.CreateParams;
        cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT
        return cp;
      }
    }
  }

это говорит окнам, что элемент управления прозрачен и элементы управления, расположенные в z-порядке за этим элементом управления, также должны быть отображены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...