Как сделать окно Draggable (C # Winforms)? - PullRequest
2 голосов
/ 22 октября 2010

У меня есть форма.Я включил прозрачность в форме и удалил ее строку заголовка и границу.Внутри я создал пользовательский интерфейс, который имеет те же функции, что и окно.По сути, моя идея - создать собственное окно.

Все работает, как и ожидалось, но не работает только перетаскивание окон.Я не уверен, как включить это.Я погуглил за это.Но я не нашел никакой полезной информации для меня.

Пожалуйста, помогите мне осуществить перетаскивание этого окна.

Ответы [ 3 ]

5 голосов
/ 22 октября 2010

Я реализовал это поведение, захватив mousedown (uncapture on mouseup), а затем mousemove.

Просто переместите координаты формы (влево, вверх), эквивалентные значениям перемещения мыши (эти события имеют величину, перемещенную мышью).

Это сработало для меня.

1 голос
/ 14 ноября 2011
class YourForm : Form
{
     private const int WM_NCHITTEST = 0x84;
     private const int HTCLIENT = 0x1;
     private const int HTCAPTION = 0x2;

     ///
     /// Handling the window messages 
     ///
     protected override void WndProc(ref Message message)
     {
          base.WndProc(ref message);

          if (message.Msg == WM_NCHITTEST && (int)message.Result == HTCLIENT)
               message.Result = (IntPtr)HTCAPTION;
     }
}
0 голосов
/ 22 октября 2010

Самый простой способ - обработать сообщение WM_NCHITTEST и вернуть HTCAPTION для тех частей вашего пользовательского окна, которые работают так же, как строка заголовка в обычном окне. Windows сделает все остальное.

...