(C #) Windows Forms - Прозрачный фон во время захвата событий мыши?

голоса
2

там, кажется, подобный вопрос к этому здесь, но с «противоположными» проблемами (Он не хотел события мышей захватили).

У меня есть форма с панелью. Окно без полей и установлен точный размер панели (для всех намерений и целей, это как если панель «свободное плавание»). Я могу установить BackColor на панели для SystemColors.Control, а затем установить TransparencyKey размер окна в то же самое. Это работает в том, что он достигает желаемого эффекта (прозрачность), но панель больше не может захватывать события мыши (который имеет жизненно важное значение для функциональности)!

Есть еще один способ обойти это, или способ повторно включить захват мыши?

Я попытался перекрывая OnPaintBackground и делать Нооп, но это не удалось достичь реальной прозрачности, поскольку она не обновляет фон после каждого тика (поэтому все, что находится позади панели на начальном розыгрыше остается вне зависимости от перемещения ли панель или иным образом обновить его). Это было, однако, позволяет установить панель для захвата событий мыши.

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

Задан 19/05/2009 в 14:18
источник пользователем
На других языках...                            


2 ответов

голоса
0

Я на самом деле не имеют ответа для вас, но у меня есть еще один (может быть, чуть-чуть «Hacky») способ для вас, чтобы выполнить то, что вы пытаетесь сделать.

Установите свойство формы Непрозрачность до 1% (не связывайтесь с ключом прозрачности), и теперь он будет захватывать события. Форма не будет видно (по крайней мере на моей машине на 1% я не мог видеть его на всех), и вы все еще будете в состоянии захватить все щелчки мыши.

Ответил 19/05/2009 в 14:46
источник пользователем

голоса
1

Если вы используете VC ++ я бы сказал, что вам нужен сообщение насос для обработки сообщений о событиях WM_ мыши.

Быстрый поиск показывает этот поток, который может оказаться полезным для вас:

Захват всех событий мыши

Я ожидаю, что вы уже пробовали использовать следующие:

/// <summary>
/// A transparent control.
/// </summary>
public class TransparentPanel : Panel
{
    public TransparentPanel()
    {
    }

    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams createParams = base.CreateParams;
            createParams.ExStyle |= 0x00000020; // WS_EX_TRANSPARENT
            return createParams;
        }
    }

    protected override void OnPaintBackground(PaintEventArgs e)
    {
        // Do not paint background.
    }
}
Ответил 19/05/2009 в 15:36
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more