【发布时间】:2014-05-18 09:31:01
【问题描述】:
(xna c#) 我希望能够在我的游戏中捕获任何关闭窗口事件,这样我就可以生成“你确定吗?”消息,以便用户可以防止游戏终止。我如何捕获适当的事件以及如何防止游戏结束?这仅适用于 Windows。 我已经尝试了许多方法,包括 EndRun(),但它们似乎都为时已晚,无法结束游戏。即窗口已经关闭,没有办法退出。
【问题讨论】:
(xna c#) 我希望能够在我的游戏中捕获任何关闭窗口事件,这样我就可以生成“你确定吗?”消息,以便用户可以防止游戏终止。我如何捕获适当的事件以及如何防止游戏结束?这仅适用于 Windows。 我已经尝试了许多方法,包括 EndRun(),但它们似乎都为时已晚,无法结束游戏。即窗口已经关闭,没有办法退出。
【问题讨论】:
非常感谢您的帮助。我只是在这里回答,因为我现在不知道如何在 cmets 中添加代码。我解决了如下问题;
此代码获取表单并允许我设置关闭事件;
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 引用
【讨论】:
在 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);
}
在用户确认他愿意之前,这不会关闭窗口。希望这会有所帮助!
【讨论】:
hwnd?