2014-06-12 16 views
0

到目前爲止,我已經爲wxWidgets應用程序編寫了一些簡單代碼,例如創建菜單,框架和幾個按鈕。遵循離開的過程中,我有這樣的功能,顯示一個消息框:通過選擇「退出」菜單項關閉應用程序 - wxWidgets 3.0

int OnExit() 
    { 
    wxMessageBox("Closing the application", wxOK | wxICON_INFORMATION) 
    return 0; 
    } 

關閉通過點擊關閉(X)按鈕應用程序顯示該消息框,然後退出。但通過單擊「退出」菜單項關閉它不適用於我。我嘗試從舊示例和wxWidgets項目附帶的CodeBlocks基本示例代碼中複製一些代碼,但沒有運氣。請向我展示一個從菜單項關閉應用程序的方法。

+0

很多答案可以通過首先搜索互聯網或StackOverflow找到之前發佈在這裏。 –

回答

1
// Build: g++ this.cpp -std=gnu++11 $(wx-config --cxxflags --libs core,base) 
#include <wx/wx.h> 

class CApp : public wxApp 
{ 
public: 
    bool OnInit() { 
     // Create the main frame. 
     wxFrame * frame = new wxFrame(NULL, wxID_ANY, wxT("demo")); 
     // Add the menubar 
     wxMenu * menus[] = {new wxMenu, new wxMenu}; 
     wxString labels[] = {wxT("&File"), wxT("&Help")}; 
     frame->wxFrame::SetMenuBar(new wxMenuBar(2, menus, labels)); 
     menus[0]->Append(wxID_EXIT); 
     // Bind an event handling method for menu item wxID_EXIT. 
     this->Bind(wxEVT_MENU, [frame](wxCommandEvent &)->void{ 
      frame->Close(); 
      /* 1. method wxWindow::Close 
      * 2. event type wxEVT_CLOSE_WINDOW 
      * 3. method wxTopLevelWindow::OnCloseWindow 
      * 4. method wxTopLevelWindow::Destroy (overriding wxWindow::Destroy) 
      * 5. op delete 
      */ 
     }, wxID_EXIT); 
     // Enter the message loop. 
     frame->Centre(wxBOTH); 
     frame->Show(true); 
     return true; 
    } 
    int OnExit() { 
     wxMessageBox("Closing the application", wxEmptyString, wxOK | wxICON_INFORMATION); 
     return this->wxApp::OnExit(); 
    } 
}; 
wxDECLARE_APP(CApp); 
wxIMPLEMENT_APP(CApp); 
2

嘗試在網上搜索「wxWidgets的關閉窗口菜單」:
wxWidgets Hello World Example

在你OnExit功能,你需要調用Close方法作爲例子。

+0

謝謝,但這是我嘗試的第一件事,我得到了:構建錯誤:'關閉'未在此範圍內聲明或「mainFrame」尚未聲明。 –

+0

您的錯誤消息看起來像您要麼沒有包含正確的文件,您的事件處理程序不是您的窗口類的成員,或者您需要使用範圍解析運算符'::'。 –

+0

它與示例中介紹的事件表一起使用。但我希望用Bind來實現它,因爲我相信這是處理事件的當前標準方式。 –