У меня есть пользовательский элемент управления в .Net, где я использую тест на попадание в WndProc, чтобы разрешить изменение размера во время выполнения с помощью мыши.
Проблема заключается в том, что после успешного нажатия кнопки мыши (нажатие кнопки мыши, перетаскивание для изменения размера, отпускание мыши) элемент управления переходит вверх в порядке Z и разрушает его положение в форме.
Мне нужен тест на попадание, так как это очень настраиваемый элемент управления.
Есть ли способ в WndProc не дать элементу управления изменить его Z-порядок?
Спасибо.
Код проверки попадания:
protected override void WndProc(ref Message m) {
if (!DesignMode && Sizeable && (m.Msg == Win32Wrapper.WM_NCHITTEST)) {
Point Hit = new Point((int)m.LParam & 0xFFFF, (int)m.LParam >> 16);
Hit = this.PointToClient(Hit);
int DistToBorder = 5;
if (Hit.X < DistToBorder) {
if (Hit.Y < DistToBorder) {
m.Result = (IntPtr)Win32Wrapper.HTTOPLEFT;
return;
}
if (Hit.Y > this.ClientRectangle.Bottom - DistToBorder) {
m.Result = (IntPtr)Win32Wrapper.HTBOTTOMLEFT;
return;
}
m.Result = (IntPtr)Win32Wrapper.HTLEFT;
return;
}
else if (Hit.X > ClientRectangle.Right - DistToBorder) {
if (Hit.Y < DistToBorder) {
m.Result = (IntPtr)Win32Wrapper.HTTOPRIGHT;
return;
}
else if (Hit.Y > this.ClientRectangle.Bottom - DistToBorder) {
m.Result = (IntPtr)Win32Wrapper.HTBOTTOMRIGHT;
return;
}
m.Result = (IntPtr)Win32Wrapper.HTRIGHT;
return;
}
else if (Hit.Y < DistToBorder) {
m.Result = (IntPtr)Win32Wrapper.HTTOP;
return;
}
else if (Hit.Y > this.ClientRectangle.Bottom - DistToBorder) {
m.Result = (IntPtr)Win32Wrapper.HTBOTTOM;
return;
}
}