(xna С#), я бы хотел уловить любое событие закрытого окна в моей игре, чтобы я мог создать "вы уверены?". чтобы пользователь мог предотвратить завершение игры. как я могу захватить соответствующее событие и как я могу предотвратить завершение игры? это только для окон. Я попробовал несколько методов, включая EndRun(), но все они, кажется, слишком поздно, чтобы что-либо сделать с окончанием игры. т.е. окно уже закрыто, и нет выхода к нему.
Большое спасибо за Вашу помощь. Я только отвечаю здесь, потому что я не сейчас, как добавить код в комментарии. я решил проблему следующим образом:
этот код получает форму и позволяет мне установить событие закрытия;
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 на ваш проект
В С# вы можете переопределить 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
, из вашего окна?