Щелкните через прозрачность для оконных форм Visual C #?

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

RE: Это может быть слишком очевидно, но пробовали ли вы отправить панель на задний план, щелкнув правой кнопкой мыши и выбрав «Отправить на задний план»?

Я имею в виду рабочий стол или firefox, а не что-то в моем проекте.


person Ryan    schedule 21.09.2008    source источник


Ответы (1)


Создать прозрачную форму верхнего уровня очень просто. Просто сделайте так, чтобы он заполнял экран или требуемую область, и определите, чтобы у него были цвета TransparenyKey и BackColor одного и того же значения.

Заставить его игнорировать мышь достаточно просто, вам просто нужно переопределить WndProc и сообщить WM_HITTEST, что все позиции мыши должны рассматриваться как прозрачные. Это заставляет мышь взаимодействовать с тем, что находится под окном. Что-то вроде этого...

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == (int)WM_NCHITTEST)
            m.Result = (IntPtr)HTTRANSPARENT;
        else
            base.WndProc(ref m);
    }
person Phil Wright    schedule 21.09.2008
comment
Куда поместить этот код? Когда я поместил его в InitializeCoponets, это не сработало. Я даже ни разу не позвонил. - person Hooch; 23.09.2011
comment
Поместите в форму class. Кстати, WM_NCHITTEST = 0x84 и HTTRANSPARENT = -1. Оно работает!!! : D - person Pedro77; 13.03.2012
comment
Любопытно, что это не сработало для меня в Win8 с использованием многоуровневого окна. : hovers будет проходить, но щелчки активируют мое окно, а не проходят. Вместо этого сработало значение WS_EX_TRANSPARENT. - person Roman Starkov; 03.02.2013
comment
Также не работает для меня, проект win10x64, C # Windows Forms с использованием .net 4.5. Интересно, что я тоже не получаю hover-события. - person omJohn8372; 16.01.2018