2013-05-22 2 views
0

Я хотел бы спросить пользователя «Вы уверены, что хотите выйти из приложения?» вопрос. Если пользователь нажмет «Да», приложение завершится. Если пользователь нажат «Нет», приложение продолжит работу. Как мне это сделать?подтвердить, когда пользователь нажимает кнопку X

Я использую visual C++ 2008 и mfc.

+1

Этот вид UI просто ужасно, большинство пользователей будет искать деинсталлятор дальше. Более типично подходящее сообщение: «Вы потеряете десять минут своей жизни, когда вы нажмете« Да »и« Нет ». Напишите лучший код, убедитесь, что пользователь снова запущен и работает без потери данных менее чем за 10 секунд. –

ответ

1

Вам необходимо обработать сообщение WM_CLOSE, которое может быть выполнено в MFC на adding ON_WM_CLOSE to your CMainFrame class's message map и обеспечивает реализацию функции OnClose.

(Мастер класс может сделать это для вас.)

void CMainFrame::OnClose() 
{ 
    if (AfxMessageBox("Exit application?", MB_YESNO) == IDYES) 
     __super::OnClose(); 
} 

__super является расширением MSVC, что позволяет обращаться к немедленному базовому классу. Если вы компилируете другой компилятор (маловероятный для приложения MFC) или используете нестандартные расширения, вам неудобно, вы можете заменить фактическое имя базового класса.

+0

ошибка C2248: «CFrameWnd :: OnClose»: не может получить доступ к защищенному члену, объявленному в классе «CFrameWnd» – gorkem

+0

ошибка C2352: «CFrameWnd :: OnClose»: незаконный вызов нестатической функции-члена – gorkem

+0

Не называйте ее в классе Main состав. и попытайтесь изменить void CMainFrame на статический void CMainFrame. – Matheno

0

Подход, предложенный Марийке, является правильным. Но для его компиляции вы должны добавить ON_WM_CLOSE в карту сообщений CMainFrame, и вы должны использовать фактический базовый класс, где Марийке использовал CFrameWnd. (Есть несколько возможных базовых классов). Например, карта сообщение может выглядеть следующим образом, если базовый класс CMDIFrameWndEx:

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWndEx) 
ON_WM_CREATE() 
ON_WM_CLOSE() 
.... 
Смежные вопросы