Форма Windows с прозрачным фоном, по которому нельзя кликнуть
Использование форм C# / windows. Попытка сделать фон формы прозрачным, не теряя возможности получать клики.
this.Opacity делает всю форму прозрачной (не только фон)
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;
}
}