Страницы

Поиск по вопросам

пятница, 7 июня 2019 г.

Перемещаемая форма со скрытыми границами

Возможно ли сделать так, чтобы форму можно было перемещать мышкой за ее главное окно, даже если у нее скрыты границы? p.s. + еще ко всему этому чтобы она Resizable была так же.


Ответ

Конечно такое возможно. Один из вариантов - послать окну сообщение WM_NCLBUTTONDOWN на нажатие мыши, которое сигнализирует о нажатии левой клавиши мыши вне клиентской части окна, то есть на скрытых границах. Однако, перед этим действием необходимо снять "захват" курсора окном, иначе сообщение будет просто проигнорировано.
private const int WM_NCLBUTTONDOWN = 0xA1; private const int HTCAPTION = 0x2;
protected override void OnMouseDown(MouseEventArgs e) { Cursor = Cursors.Hold; Capture = false; Message msg = Message.Create(Handle, WM_NCLBUTTONDOWN, (IntPtr)HTCAPTION, IntPtr.Zero); DefWndProc(ref msg); Cursor = Cursors.Default; }

С ресайзингом придётся повозится дольше, тем более если его делать на этой же самой форме. Как вариант - сначала сделать ресайз только за правый нижний угол. Придётся переопределить оконную процедуру Form.WndProc и самому обработать сообщение WM_NCHITTEST. Кстати, первую проблему можно тоже решить в этом месте. Более подробно смотрите здесь

Комментариев нет:

Отправить комментарий