Правильный способ для достижения этой цели - добавить обработчик обработки сообщений (например, переопределив Form.WndProc
) к своей форме и обработать сообщение WM_NCHITTEST
. (Вы можете найти определение C # этого сообщения на PInvoke.net ). В частности, когда вы получаете сообщение, рассчитайте, подходит ли тест попадания для точки в регионе, который вы назначили для изменения размера, и если верните HTBOTTOMRIGHT. Окно по умолчанию будет делать все остальное за вас, так как будет предполагать, что пользователь щелкнул в правом нижнем углу границы окна, даже если у вашего окна нет границы.
Для этого подхода требуется небольшая часть взаимодействия с Win32, но он сделает ваш изменение размера точно таким же, как и любое другое изменение размера окна.
Самый простой способ - сделать, как сказал @benPearce, поместить панель в угол и отрегулировать размер формы с помощью параметра Ширина / Высота. Это будет работать, но изменение размера не будет гладким, особенно в Vista и Win7 Basic, где полная перерисовка отключена при стандартном перемещении и изменении размера, в то время как будет пытаться перерисовать на каждом шаге.
Обновление : в обоих подходах вам нужно будет также выяснить, как покрасить захват. Вы можете поместить растровое изображение стандартного захвата, например. Тем не менее, учитывая, что ваша форма не имеет заголовка и границы, поэтому вы не обязательно застряли со стандартными визуальными элементами Windows, вы можете выбрать что-то удивительное.
Обновление 2 : Если у вас есть элемент управления, охватывающий все окно, он будет использовать сообщения мыши в форме. Вы должны каким-то образом обрезать место, которое хотите использовать для изменения размера, из этого элемента управления. У вас есть несколько вариантов решения этой проблемы:
- Измените размер элемента управления, чтобы освободить место для ручки изменения размера.
- Настройте область управления (через свойство Region), чтобы исключить изменение размера.
- Закройте ручку изменения размера панели, прослушайте ее сообщение MouseEnter и установите для свойства формы Capture значение true, что приведет к тому, что все дальнейшие сообщения мыши перейдут к нему. Примечание : вам придется снять захват, как только мышь покинет эту область после завершения изменения размера.
Я бы рекомендовал перейти к варианту 1 как к простейшему. Вариант 3 является наиболее сложным и потребует подробных сведений о том, как работает ввод с помощью мыши в Windows, поэтому я не рекомендовал бы его. Вариант 2 является хорошей альтернативой варианту 1, но вам нужно будет попытаться увидеть, как элемент управления ListView отреагирует на настройку его региона.