xna c # перехватить и отменить кнопку закрытия окна (x) и Ctrl F4

1

(xna С#), я бы хотел уловить любое событие закрытого окна в моей игре, чтобы я мог создать "вы уверены?". чтобы пользователь мог предотвратить завершение игры. как я могу захватить соответствующее событие и как я могу предотвратить завершение игры? это только для окон. Я попробовал несколько методов, включая EndRun(), но все они, кажется, слишком поздно, чтобы что-либо сделать с окончанием игры. т.е. окно уже закрыто, и нет выхода к нему.

Теги:
xna

2 ответа

3

Большое спасибо за Вашу помощь. Я только отвечаю здесь, потому что я не сейчас, как добавить код в комментарии. я решил проблему следующим образом:

этот код получает форму и позволяет мне установить событие закрытия;

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

В С# вы можете переопределить 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
    я получаю следующую ошибку при попытке реализовать этот код; Ошибка 2 «Microsoft.Xna.Framework.Game» не содержит определения «WndProc»
  • 1
    Можно ли получить ручку, hwnd , из вашего окна?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню