Прозрачный элемент управления для размещения в окне - PullRequest
0 голосов
/ 19 августа 2011

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

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

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

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

1 Ответ

0 голосов
/ 19 августа 2011

Проблема, с которой вы сталкиваетесь, заключается в том, что элементы управления WinForms не поддерживают истинную прозрачность, и заставить их сделать это может быть немного сложно.Они рисуют дочерний элемент управления (когда прозрачность включена через SetStyle), но у этого есть свои особенности.Сначала вы должны попробовать что-то вроде этого:

// in your custom control class...
protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;
        cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT

        return cp;
    }
} 

Я нашел этот метод более надежным, чем следующие, но вы должны попробовать это также:

public MyTransparentControl()
{
    SetStyle( ControlStyles.SupportsTransparentBackColor |     
              ControlStyles.AllPaintingInWmPaint |
              ControlStyles.UserPaint, true );

    BackColor = Color.Transparent;
}

В качестве альтернативыподход, вы рассматривали возможность использования WPF вместо WinForms?Я знаю, что это не всегда вариант, но если это так, вы значительно упростите свою жизнь, так как элементы управления WPF поддерживают прозрачность и управляют многоуровневым управлением из коробки.

...