xna c#捕获并取消关闭窗口(x)按钮和Ctrl F4

xna c#捕获并取消关闭窗口(x)按钮和Ctrl F4,c#,xna,C#,Xna,(xna c#)我希望能够捕获游戏中的任何关闭窗口事件,以便生成“确定吗?”消息,以便用户可以阻止游戏终止。如何捕捉适当的事件以及如何防止游戏结束?这只适用于windows。 我已经尝试了很多方法,包括EndRun(),但它们似乎都太晚了,无法结束游戏。即窗口已关闭,无法确定退出的原因。在C#中,您可以覆盖WndProc以在Windows消息到达应用程序之前捕获它们。在这里,我覆盖了WM_CLOSE消息,以便在关闭表单之前显示messagebox protected override void

(xna c#)我希望能够捕获游戏中的任何关闭窗口事件,以便生成“确定吗?”消息,以便用户可以阻止游戏终止。如何捕捉适当的事件以及如何防止游戏结束?这只适用于windows。 我已经尝试了很多方法,包括EndRun(),但它们似乎都太晚了,无法结束游戏。即窗口已关闭,无法确定退出的原因。

在C#中,您可以覆盖
WndProc
以在Windows消息到达应用程序之前捕获它们。在这里,我覆盖了
WM_CLOSE
消息,以便在关闭表单之前显示
messagebox

protected override void WndProc(ref Message m) {
    if (m.Msg == 0x10) {
        if (MessageBox.Show("Do you really want to exit?", "Exit Game", MessageBoxButtons.YesNo) == DialogResult.No)
            return;
    }
    base.WndProc(ref m);
}

这不会关闭窗口,直到用户确认他想要。希望这有帮助

非常感谢您的帮助。我只是在这里回答,因为我现在不知道如何在评论中添加代码。我解决了这个问题如下

此代码获取表单并允许我设置关闭事件

Form MyGameForm = (Form)Form.FromHandle(Window.Handle);
MyGameForm.Closing += ClosingFunction;
我的closing函数如下所示

public void ClosingFunction (object sender, System.ComponentModel.CancelEventArgs e)
{

    if (MyMsgBox.Show("Are you sure you want to exit withou saving?", "Exit") == false)
    {
        e.Cancel = true; // Cancel the closing event
        return;
    }
}

为了使用此代码,您需要为您的项目添加.NET Systems.Windows.Forms引用

我在尝试实现该代码时遇到以下错误:;错误2“Microsoft.Xna.Framework.Game”不包含“WndProc”的定义是否可以获取窗口的句柄
hwnd
?如果可以获取句柄,我将查看hooks()以捕获消息。这个()也有帮助。