2014-05-17 53 views
0

(xna c#)我想能够在我的游戏中捕捉任何关闭窗口事件,所以我可以生成一个“你确定?消息,以便用户可以防止游戏终止。我如何捕获适当的事件,以及如何防止游戏结束?这仅适用于Windows。 我已经尝试了许多已经包括EndRun()的方法,但它们似乎都为时过晚无法做任何关于结束游戏的方法。即窗户已经关闭,无法绕过出口。xna c#陷阱并取消关闭窗口(x)按钮和Ctrl F4

回答

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

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

+0

我碰到下面的错误,当我试图实现代码添加.NET Systems.Windows.Forms参考;错误'Microsoft.Xna.Framework.Game'不包含'WndProc'的定义 – blink

+1

是否有可能获得窗口的句柄“hwnd”? – Blue0500

+0

如果你能得到句柄,我会查看钩子(http://msdn.microsoft.com/en-us/library/windows/desktop/ms644959%28v=vs.85%29.aspx)来捕获消息。这(http://msdn.microsoft.com/en-us/magazine/cc188966.aspx)也可以帮助。 – Blue0500

2

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

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

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

为了使用此代码,你需要给你的项目

相关问题