Форма Windows с прозрачным фоном, по которому нельзя кликнуть - PullRequest
2 голосов
/ 17 сентября 2009

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

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

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

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

как?

1 Ответ

3 голосов
/ 17 сентября 2009

Вам нужно обработать 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;
    }
}
...