У меня есть панель, для которой я переопределил WndProc
.Я обрабатываю WM_NCCALCSIZE
в моем WndProc
, чтобы обеспечить область, не являющуюся клиентом, в качестве границы, и теперь хочу обрабатывать события мыши, происходящие в области, не являющейся клиентом.
Я пытался обработать WM_NCMOUSEMOVE
Сообщение, но Панель, кажется, никогда не получает это Сообщение.Я также пробовал другие сообщения мыши, не относящиеся к области клиента, и они тоже не работают.Кстати, сообщения клиентской области мыши работают нормально.
protected RECT ResizeClient(RECT rc)
{
rc.Top += 60;
rc.Left += 30;
rc.Right -= 30;
rc.Bottom -= 30;
return (rc);
}
protected override void WndProc(ref Message m)
{
if (m.Msg == WinAPI.WM_NCCALCSIZE)
{
MessageBox.Show("Client Area.");
if (m.WParam.ToInt32() == 0)
{
RECT rc = (RECT)(m.GetLParam(typeof(RECT)));
rc = ResizeClient(rc);
Marshal.StructureToPtr(rc, m.LParam, true);
}
else
{
NCCALCSIZE_PARAMS ncc = (NCCALCSIZE_PARAMS)(m.GetLParam(typeof(NCCALCSIZE_PARAMS)));
ncc.rgrc0 = ResizeClient(ncc.rgrc0);
Marshal.StructureToPtr(ncc, m.LParam, true);
}
m.Result = IntPtr.Zero;
}
if (m.Msg == WinAPI.WM_NCMOUSEMOVE)
{
MessageBox.Show("Mouse Move");
}
base.WndProc(ref m);
}
Мне не нужно обрабатывать эти события мыши внутри WndProc
, хотя это мой предпочтительный метод, но мне нужно перехватывать события мыши, которые происходят в области, не являющейся клиентом.
Если кто-нибудь знает, как захватывать и обрабатывать события мыши, которые происходят в областях управления, не связанных с клиентом, в целом и, в частности, на панели, я был бы очень признателен.
Спасибо, Дэнни