Форма Windows с прозрачным фоном, по которому нельзя кликнуть

Использование форм C# / windows. Попытка сделать фон формы прозрачным, не теряя возможности получать клики.

  1. this.Opacity делает всю форму прозрачной (не только фон)

  2. BackColor = Color.Red;
    TransparencyKey = BackColor;

делает фон формы прозрачным и делает возможным щелчок мышью. Я хочу, чтобы форма была прозрачной, но она должна получать клики

как?

1 ответ

Решение

Вам нужно обработать WM_NCHITTEST. Обратите внимание, что во фрагменте ниже m.lParam содержит упакованные координаты X и Y положения мыши относительно верхнего левого угла экрана, и вам необходимо проверить, соответствует ли это местоположение вашей прозрачной области.

В этом примере я возвращаю HTCAPTION, что означает, что этот регион будет вести себя как заголовок окна, т.е. пользователь сможет перетаскивать окно, щелкая и перетаскивая это местоположение. Посмотрите здесь, какие другие значения могут быть возвращены и что они значат

protected override void WndProc(ref Message m) {
    switch (m.Msg) {
    case 0x84: // this is WM_NCHITTEST
        base.WndProc(ref m);
        if ((/*m.LParam.ToInt32() >> 16 and m.LParam.ToInt32() & 0xffff fit in your transparen region*/) 
          && m.Result.ToInt32() == 1) {
            m.Result = new IntPtr(2);   // HTCAPTION
        }
        break;
    default:
        base.WndProc(ref m);
        break;
    }
}
Другие вопросы по тегам