He leído su comentario con respecto a mi respuesta y pude obtener una solución más completa para usted. Ejecuté esto rápidamente y parecía tener el comportamiento que deseabas. En lugar de derivar sus winforms, en el formulario, se derivan de esta clase:
using System;
using System.Windows.Forms;
using System.ComponentModel;
namespace NoMinimizeTest
{
public class MinimizeControlForm : Form
{
private const int WM_SYSCOMMAND = 0x0112;
private const int SC_MINIMIZE = 0xf020;
protected MinimizeControlForm()
{
AllowMinimize = true;
}
protected override void WndProc(ref Message m)
{
if (!AllowMinimize)
{
if (m.Msg == WM_SYSCOMMAND)
{
if (m.WParam.ToInt32() == SC_MINIMIZE)
{
m.Result = IntPtr.Zero;
return;
}
}
}
base.WndProc(ref m);
}
[Browsable(true)]
[Category("Behavior")]
[Description("Specifies whether to allow the window to minimize when the minimize button and command are enabled.")]
[DefaultValue(true)]
public bool AllowMinimize
{
get;
set;
}
}
}
Se podría hacer un poco más si desea ser capaz de decidir si permite reducir al mínimo en el momento de enviar el clic, por ejemplo:
using System;
using System.Windows.Forms;
using System.ComponentModel;
namespace NoMinimizeTest
{
public class MinimizeControlForm : Form
{
private const int WM_SYSCOMMAND = 0x0112;
private const int SC_MINIMIZE = 0xf020;
protected MinimizeControlForm()
{
}
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_SYSCOMMAND)
{
if (m.WParam.ToInt32() == SC_MINIMIZE && !CheckMinimizingAllowed())
{
m.Result = IntPtr.Zero;
return;
}
}
base.WndProc(ref m);
}
private bool CheckMinimizingAllowed()
{
CancelEventArgs args = new CancelEventArgs(false);
OnMinimizing(args);
return !args.Cancel;
}
[Browsable(true)]
[Category("Behavior")]
[Description("Allows a listener to prevent a window from being minimized.")]
public event CancelEventHandler Minimizing;
protected virtual void OnMinimizing(CancelEventArgs e)
{
if (Minimizing != null)
Minimizing(this, e);
}
}
}
Para obtener más información acerca de esta notificación de ventana, consulte el MSDN article about it.
Esto oculta el cuadro de minimizar, pero no lo atenúa. –
Hmmm, extraño. Lo probé y lo atenúa. Todavía está allí, semitransparente y no puedes hacer clic en él. – Coincoin
Depende del tema de Windows. Si el botón de minimizar está habilitado, obtienes una imagen. Si está deshabilitado, obtienes una imagen diferente. Esa imagen podría no ser nada, por lo que ni siquiera ves un botón desplegable. – Eyal