【问题标题】:Closing the application by selecting 'Quit' menu item - wxWidgets 3.0通过选择“退出”菜单项关闭应用程序 - wxWidgets 3.0
【发布时间】:2014-06-12 00:06:11
【问题描述】:

到目前为止,我已经为 wxWidgets 应用程序编写了一些简单的代码,例如创建菜单、框架和一些按钮。为了遵循退出的过程,我有这个显示消息框的功能:

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

通过单击关闭 ( X ) 按钮关闭应用程序会显示消息框,然后退出。但是通过单击“退出”菜单项来关闭它对我不起作用。我尝试从一个旧示例和 wxWidgets 项目附带的 CodeBlocks 基本示例代码中复制一些代码,但没有成功。请告诉我从菜单项关闭应用程序的方法。

【问题讨论】:

  • 发帖前先上网或 StackOverflow 搜索可以找到很多答案。

标签: c++ menu wxwidgets codeblocks windows-7-x64


【解决方案1】:

尝试在网上搜索“wxwidgets 关闭窗口菜单”:
wxWidgets Hello World Example

在您的OnExit 函数中,您需要像示例中那样调用Close 方法。

【讨论】:

  • 谢谢,但这是我尝试的第一件事,我得到了:构建错误:未在此范围内声明“关闭”或未声明“主框架”。
  • 您的错误消息看起来像是您没有包含正确的文件,您的事件处理程序不是您的窗口类的成员,或者您需要使用范围解析运算符'::'。
  • 它与示例中所示的事件表一起使用。但我希望通过 Bind 来实现它,因为我相信这是当前处理事件的标准方式。
  • 这只是几种方法之一,而不是标准。方法Bind 是在每个实例的动态事件表中添加一个条目。还有另一种类型的事件表,名为“静态每类事件表”。请注意它是复数形式。静态事件表只能通过EVT_MENU等事件宏扩展。
【解决方案2】:
// 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-29
    • 2020-04-06
    • 2011-03-27
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多