Windows Forms: прохождение кликов через частично прозрачное окно "всегда сверху"

Я проектирую окно, которое всегда на экране и около 20% непрозрачное. Оно спроектировано так, чтобы быть своего рода окном состояния, поэтому оно всегда вверху, но я хочу, чтобы люди могли щелкать по окну в любом другом приложении ниже. Вот непрозрачное окно, расположенное поверх этого ТАКого сообщения, которое я сейчас печатаю:

Example

Видишь эту серую полосу? Это бы помешало мне набрать текст в поле тегов.

Ответ 1

Вы можете создать окно, переходящее по клику, добавив стили WS_EX_LAYERED и WS_EX_TRANSPARENT в его расширенные стили. Также, чтобы он всегда был сверху, установите его TopMost на true и сделайте его полупрозрачным, используйте подходящее значение Opacity :

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        this.Opacity = 0.5;
        this.TopMost = true;
    }
    [DllImport("user32.dll", SetLastError = true)]
    static extern int GetWindowLong(IntPtr hWnd, int nIndex);
    [DllImport("user32.dll")]
    static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
    const int GWL_EXSTYLE = -20;
    const int WS_EX_LAYERED = 0x80000;
    const int WS_EX_TRANSPARENT = 0x20;
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        var style = GetWindowLong(this.Handle, GWL_EXSTYLE);
        SetWindowLong(this.Handle,GWL_EXSTYLE , style | WS_EX_LAYERED | WS_EX_TRANSPARENT);
    }
}

Образец результата

enter image description here