Winforms - WM_NCHITEST сообщение для нажатия на элемент управления
У меня есть простая форма окна без рамки и несколько элементов управления надписями (ничего, что нужно нажимать). Мне нужно было иметь возможность позволить пользователю перемещать форму, щелкая в любом месте на ней, поэтому я нашелэтот вопрос, и использовал следующий код, найденный там.
private const int WM_NCHITTEST = 0x84;
private const int HTCLIENT = 0x1;
private const int HTCAPTION = 0x2;
protected override void WndProc(ref Message m)
{
switch (m.Msg) {
case WM_NCHITTEST:
base.WndProc(ref m);
if ((int)m.Result == HTCLIENT) {
m.Result = (IntPtr)HTCAPTION;
return;
} else {
return;
}
break;
}
base.WndProc(ref m);
}
Это хорошо работает ... в точку. Если я щелкну где-нибудь на самой форме (фон),WM_NCHITTEST
являетсяHTCLIENT
так что я могу переместить мою форму, как ожидалось. Однако если я щелкну сам элемент управления меткой, сообщение будет другим, и я не смогу сказать, что это такое.
я нашелЭта статья о различных возможных значениях дляWM_NCHITTEST
но ни один из них, кажется, не то, что мне нужно.
Я понимаю, что могу отключить все свои элементы управления ярлыками, и это позволило бы мне нажимать & quot; на & quot; как будто это была сама форма, но мне интересно, есть ли лучший / другой способ сделать это.
Спасибо за помощь!