Ответ 1
Вы можете установить для свойства MaximizeBox
формы значение false
Меня раздражает, что мне обещано фиксированное окно, в котором пользователь не может изменять размер, но тогда, конечно, им разрешено дважды щелкнуть строку заголовка, чтобы максимально увеличить это окно "unresizable". Как я могу отключить это? Могу ли я сделать это с помощью кода winforms, или я должен перейти к Win32?
Спасибо!
Вы можете установить для свойства MaximizeBox
формы значение false
Вы можете отключить сообщение двойного щелчка в строке заголовка в целом (или изменить поведение по умолчанию, которое максимизирует окно). он работает на любом 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);
}
Ура!
/// /// Это мы переопределяем базовую процедуру окна 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);
}
Я знаю, что опаздываю на вечеринку, может помочь тем, кто ищет то же самое.
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;
}
Я только что проверил его в 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 - код события