我有一个专门为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
中的这些Mouse事件,尽管这是我的首选方法,但是我确实需要捕获非客户区域中发生的Mouse Events。
如果有人知道如何捕获和处理一般在非客户控制区域(尤其是面板)中发生的鼠标事件,我将不胜感激。
感谢丹尼