Как я могу остановить двойной щелчок строки заголовка окна от максимизации окна FormBorderStyle.FixedToolWindow? - PullRequest
13 голосов
/ 06 марта 2012

Меня раздражает, что мне обещают фиксированное окно, которое пользователь не может изменить, но, конечно, ему разрешают дважды щелкнуть строку заголовка, чтобы максимизировать это «неизменяемое» окно. Как я могу отключить это? Могу ли я сделать это с помощью кода winforms или перейти на Win32?

Спасибо!

Ответы [ 5 ]

29 голосов
/ 06 марта 2012

Можно установить для свойства MaximizeBox формы значение false

19 голосов
/ 03 ноября 2012

Вы можете отключить сообщение двойного щелчка в строке заголовка в целом (или изменить поведение по умолчанию, при котором окно развернуто максимально). это работает на любом FormBorderStyle:

private const int WM_NCLBUTTONDBLCLK = 0x00A3; //double click on a title bar a.k.a. non-client area of the form

        protected override void WndProc(ref Message m)
        {
            if (m.Msg == WM_NCLBUTTONDBLCLK)
            {
                m.Result = IntPtr.Zero;
                return;
            }
            base.WndProc(ref m);
        }

Источник MSDN

Ура!

9 голосов
/ 15 января 2013

/// /// Это переопределение базовой оконной процедуры WIN32, чтобы предотвратить перемещение формы мышью, а также изменение размера двойным щелчком мыши. /// ///

    protected override void WndProc(ref Message m)
    {
        const int WM_SYSCOMMAND = 0x0112;
        const int SC_MOVE = 0xF010;
        const int WM_NCLBUTTONDBLCLK = 0x00A3; //double click on a title bar a.k.a. non-client area of the form

        switch (m.Msg)
        {
            case WM_SYSCOMMAND:             //preventing the form from being moved by the mouse.
                int command = m.WParam.ToInt32() & 0xfff0;
                if (command == SC_MOVE)
                    return;
                break;
        }

       if(m.Msg== WM_NCLBUTTONDBLCLK)       //preventing the form being resized by the mouse double click on the title bar.
        {
            m.Result = IntPtr.Zero;                   
            return;                   
        }

        base.WndProc(ref m);
    }
3 голосов
/ 18 июня 2015

Я знаю, что опаздываю на вечеринку. Может помочь тому, кто ищет то же самое.

private const int WM_NCLBUTTONDBLCLK = 0x00A3; //double click on a title bar a.k.a. non-client area of the form

private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{

    switch (msg)
    {                
        case WM_NCLBUTTONDBLCLK:    //preventing the form being resized by the mouse double click on the title bar.
            handled = true;
            break;                
        default:
            break;
    }
    return IntPtr.Zero;
}
1 голос
/ 31 мая 2017

Я только что проверил это в VB.Net.Ниже код работал для меня.

Private Const Win_FormTitleDoubleClick As Integer = 163

Protected Overrides Sub WndProc(ByRef m As Message)
    If m.Msg = Win_FormTitleDoubleClick Then
        m.Result = IntPtr.Zero
        Return
    End If
    MyBase.WndProc(m)
End Sub

Примечание: 163 код события

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...