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

149
19

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


Спасибо!

спросил(а) 2021-01-28T01:04:44+03:00 1 месяц назад
1
Решение
215

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

ответил(а) 2021-01-28T01:04:44+03:00 1 месяц назад
179

Вы можете отключить сообщение двойного щелчка в строке заголовка в целом (или изменить поведение по умолчанию, которое максимизирует окно). он работает на любом 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


Ура!

ответил(а) 2021-01-28T01:04:44+03:00 1 месяц назад
129

///       /// Это мы переопределяем базовую процедуру окна 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);
}

ответил(а) 2021-01-28T01:04:44+03:00 1 месяц назад
85

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


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;
}

ответил(а) 2021-01-28T01:04:44+03:00 1 месяц назад
61

Я только что проверил его в 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 - код события

ответил(а) 2021-01-28T01:04:44+03:00 1 месяц назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема