在我的应用程序中,我需要暂时灰显主窗体的最小化按钮.任何想法如何实现这一目标?我不介意对Win32 dll进行p /调用.
编辑:灰显最小化按钮将是首选解决方案,但有没有其他方法可以防止表单最小化?
我阅读了您对我的回复的评论,并为您提供了更完整的解决方案.我跑得很快,似乎有你想要的行为.而不是从Form派生你的winforms,而是派生自这个类:
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; } } }
如果您希望能够在发送点击时决定是否允许最小化,则可以执行更多操作,例如:
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); } } }
有关此窗口通知的详细信息,请参阅有关它的MSDN文章.
form.MinimizeBox = false;
或者如果在表格范围内
MinimizeBox = false;