Shadow + Mouse Move for Borderless Windows Forms Application C#

Here you can copy source code of shadow for your borderless Windows Forms Application. By default if you set FormBorderStyle to None you can't have any shadow like Windows 10 have. But this code can help you to create absolutely the same shadow.

Tutorial Eng
Tutorial Rus

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

  1. Добрый день!

    Скажите пожалуйста, а для чего нужны методы PanelMove_Mouse*? Без них всё вроде работает.
    И подскажите пожалуйста, как запретить разворачивание окна на весь экран по двойному клику?
    Не смотря на то, что установил следующие параметры, как только добавляю ваш код, становится возможным по двойному клику разворачивать окно на весь экран
    his.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
    this.MaximizeBox = false;
    this.MaximumSize = new System.Drawing.Size(409, 160);
    this.MinimumSize = new System.Drawing.Size(409, 160);
    Если убрать строчку  if (m.Msg == WM_NCHITTEST && (int)m.Result == HTCLIENT) m.Result = (IntPtr)HTCAPTION;
    то окно не разворачивается, но тогда придется задействовать методы PanelMove_Mouse*, а хотелось бы обойтись без этого

    0
    1. Добрый 🖐

      Это нужно для того, чтобы форму можно было бы перемещать.
      Сегодня как раз решал одну из проблем данного метода, но пока тщетно.
      Вы можете поубирать лишний код, если всё работает. Но проверяйте, чтобы форму можно было таскать.
      Либо создайте свою панель и прикрепите её вместо шапки. Но на неё придётся писать свой метод, MouseDown, который позволит таскать форму за эту самую панель.

      Касаемо двойного клика по форме.
      После BorderStyle = None довольно много становится недоступно, это спасибо Microsoft.
      Идеальное решение нужно самому искать. Но здесь предложен наиболее удачный компромисс.

      0
      1. Спасибо, вроде всё понял 🙂
        Пока остановился на следующем решении:
        1. Убрал код, который по сути реализует функционал перетаскивания:  if (m.Msg == WM_NCHITTEST && (int)m.Result == HTCLIENT) m.Result = (IntPtr)HTCAPTION;

        2. Добавил обработчики событий для MouseDown, MouseMove, и MouseUp, дабы задействовать методы PanelMove_Mouse*, взамен удаленной строки из п.1:
        MouseDown += new MouseEventHandler(PanelMove_MouseDown);
        MouseMove += new MouseEventHandler(PanelMove_MouseMove);
        MouseUp += new MouseEventHandler(PanelMove_MouseUp);
         

        Теперь по двойному клику форма не разворачивается, но форму можно перемещать.

        0

Добавить комментарий