C# 如何替换最小化按钮的命令?

C# 如何替换最小化按钮的命令?,c#,winforms,button,pinvoke,minimize,C#,Winforms,Button,Pinvoke,Minimize,首先,很抱歉我的英语不好:) 其次,我可以使用以下代码知道何时移动/调整窗体的大小: protected override void WndProc(ref Message m) { if (m.Msg == WM_WINDOWPOSCHANGING) { WINDOWPOS winPos = new WINDOWPOS(); winPos = (WINDOWPOS)Marshal.PtrToStr

首先,很抱歉我的英语不好:)
其次,我可以使用以下代码知道何时移动/调整窗体的大小:

    protected override void WndProc(ref Message m)
    {

        if (m.Msg == WM_WINDOWPOSCHANGING)
        {
            WINDOWPOS winPos = new WINDOWPOS();
            winPos = (WINDOWPOS)Marshal.PtrToStructure(m.LParam, typeof(WINDOWPOS));

            //Here I just need to change the values of the WINDOWPOS structure

            Marshal.StructureToPtr(winPos, m.LParam, true);
        }
    }
当用户最小化或最大化窗口时,也会发送WM_WindowPosChanged消息。但我如何知道用户何时在最大化/最小化,而不是移动/调整大小?我尝试获取WindowsState属性,但无效:(
WINDOWPOS结构的代码为:

[StructLayout(LayoutKind.Sequential)]
public struct WINDOWPOS
{
    public IntPtr hwnd;
    public IntPtr hwndInsertAfter;
    public int x;
    public int y;
    public int cx;
    public int cy;
    public int flags;
}

有任何帮助吗?

当用户单击标题栏中的一个按钮时,您将获得
WM\u SYSCOMMAND

您可以通过覆盖WndProc()来捕获WM\u SYSCOMMAND。但是,通过调整大小事件的事件处理程序也可以轻松完成此操作:

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        mPrevState = this.WindowState;

    }
    FormWindowState mPrevState;
    protected override void OnResize(EventArgs e) {
        base.OnResize(e);
        if (mPrevState != this.WindowState) {
            mPrevState = this.WindowState;
            // Do something
            //..
        }
    }
}

很抱歉问一下,您为什么要放弃接受的UI功能?当然,后者更容易。此外,单击最小化按钮将捕获未完成的最小化。我尝试使用WM_SYSCOMMAND消息,但在设置WindowsState属性时它不起作用:(.我想阻止最小化操作并替换它!但我将尝试发送系统命令来设置WindowsState属性。