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

时间:2014-05-17 23:28:42

标签: c# xna

(xna c#)我希望能够在我的游戏中捕获任何关闭窗口事件,这样我就可以生成“你确定吗?”消息,以便用户可以阻止游戏终止。我如何陷入适当的事件,我如何阻止游戏结束?这仅适用于Windows。 我已经尝试了很多方法,包括EndRun()但是他们似乎都太晚了,无法做任何关于结束游戏的事情。即窗户已经关闭,没有办法离开出口。

2 个答案:

答案 0 :(得分:4)

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

此代码获取表单并允许我设置结束事件;

Form MyGameForm = (Form)Form.FromHandle(Window.Handle);
MyGameForm.Closing += ClosingFunction;

我的ClosingFunction看起来像这样;

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引用

答案 1 :(得分:1)

在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);
}

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