2013-05-22 39 views
0

我想問用戶「您確定要退出應用程序嗎?」題。如果用戶按是,應用程序將終止。如果用戶按下否,應用程序將繼續運行。我怎麼做?用戶按下X按鈕時確認退出

我使用visual C++ 2008和mfc。

+1

這種UI是很可怕,大多數用戶會尋找下一個卸載程序。更典型的適當的信息是「當你點擊」是「並意味着」否「時,你將失去10分鐘的生活。編寫更好的代碼,確保用戶在不到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

Marijke建議的方法是正確的。但要編譯它,必須在CMainFrame消息映射中添加ON_WM_CLOSE,並且必須使用Marijke使用CFrameWnd的實際基類。 (有幾種可能的基類。)例如,消息映射可能看起來是這樣,如果基類是CMDIFrameWndEx:

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWndEx) 
ON_WM_CREATE() 
ON_WM_CLOSE() 
....