У меня есть форма окна, которую можно перемещать, щелкая и перетаскивая любую часть формы. Я использовал метод переопределения WndProc и установил результат функции NCHITTEST равным HTCAPTION, чтобы обмануть форму, подумав, что я щелкнул заголовок - чтобы он включал перетаскивание.
Код для этого прекрасно работает, и ниже:
protected override void WndProc(ref Message msg)
{
if (msg.Msg == (int)WinAPI.NCHITTEST)
{
DefWndProc(ref msg);
if ((int)msg.Result == (int)MousePositionCodes.HTCLIENT)
{
msg.Result = (IntPtr)MousePositionCodes.HTCAPTION;
return;
}
}
}
base.WndProc(ref msg);
}
Проблема возникает, когда я вставляю ToolStripPanel в форму (она действует как перетаскиваемая панель инструментов). Мне нужна любая часть ToolStripPanel, которая не покрыта ToolStrip, для передачи сообщений, необходимых для перехода всей формы в режим перетаскивания.
Я создал свой собственный класс ToolStripContainer для переопределения функции WndProc и попытался использовать ту же функцию, что и выше, но он заставляет ToolStripContainer переходить в режим перетаскивания в форме, что не является желаемой функциональностью .
Я также попытался передать сообщения NCHITTEST родителю, а также создать новое сообщение с текущими координатами мыши и отправить его родителю, используя WinAPI и дескриптор окна родителя.
Мне здесь не хватает чего-то простого ... У кого-нибудь есть идеи?