【问题标题】:xna c# trap and cancel the close window (x) button and Ctrl F4xna c#捕获并取消关闭窗口(x)按钮和Ctrl F4
【发布时间】:2014-05-18 09:31:01
【问题描述】:

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

【问题讨论】:

    标签: c# xna


    【解决方案1】:

    非常感谢您的帮助。我只是在这里回答,因为我现在不知道如何在 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 引用

    【讨论】:

      【解决方案2】:

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

      在用户确认他愿意之前,这不会关闭窗口。希望这会有所帮助!

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-16
      相关资源
      最近更新 更多