Как при закрытии диалога завершить программу?

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
Nindzzya
In need of some credit
In need of some credit
Posts: 1
Joined: Mon Apr 06, 2020 5:46 am

Как при закрытии диалога завершить программу?

Post by Nindzzya »

Как при закрытии диалога нажимая на крестик [x] в заголовке окна завершить приложение, не создавая кнопку Close в диалоге? Вот что я написал для примера. Какие изменения мне нужно внести?

Code: Select all

#include "wx/wx.h"
enum
{
	wxID_Dialog = 5000,
	wxID_diagl_Button,
	wxID_diagl_Panel,
	wxID_main
};

class MyApp : public wxApp
{
public:
	virtual bool OnInit()  wxOVERRIDE;
};

class MyFrame : public wxFrame
{
public:
	MyFrame();
	void OnQuit(wxCommandEvent& event);

	wxDECLARE_EVENT_TABLE();
};

wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)
	EVT_BUTTON(wxID_CLOSE, MyFrame::OnQuit)
wxEND_EVENT_TABLE()

wxIMPLEMENT_APP(MyApp);

bool MyApp::OnInit()
{
	new MyFrame();
	return true;
}

MyFrame::MyFrame()
	: wxFrame(NULL, wxID_main, "main_window", wxDefaultPosition, wxSize(450, 650))
{
	wxDialog *m_Dialg = new wxDialog(GetParent(), wxID_Dialog, "Диалог", wxDefaultPosition, wxDefaultSize);
	wxBoxSizer *dialg_sizer = new wxBoxSizer(wxVERTICAL);
	wxPanel *dialg_Panel = new wxPanel((wxWindow::FindWindowById(wxID_Dialog)), wxID_diagl_Panel);
	wxButton *firstButton_Load = new wxButton(dialg_Panel, wxID_diagl_Button, "Выберете файл");
	dialg_sizer->Add(firstButton_Load, 1, wxEXPAND | wxALL, 10);
	dialg_Panel->SetSizer(dialg_sizer);
	m_Dialg->ShowModal();
}

void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
{
	Close(true);
}
wx 3.1.2 win
User avatar
T-Rex
Moderator
Moderator
Posts: 1248
Joined: Sat Oct 23, 2004 9:58 am
Location: Zaporizhzhya, Ukraine
Contact:

Re: Как при закрытии диалога завершить программу?

Post by T-Rex »

Code: Select all

#include <wx/wx.h>
#include <wx/frame.h>
#include <wx/window.h>
#include <wx/button.h>
#include <wx/dialog.h>

class wxTestFrame : public wxFrame
{
public:
	wxTestFrame(wxWindow* parent, const wxString& title) : wxFrame(parent, wxID_ANY, title) 
	{
		wxButton* button = new wxButton(this, wxID_HIGHEST + 1, wxT("Close Dialog"));
		wxFrame::Connect(wxID_HIGHEST + 1, wxEVT_BUTTON,
			wxObjectEventFunction(&wxTestFrame::OnCloseDialogButton));
	}

	void OnCloseDialogButton(wxCommandEvent& event)
	{
		wxDialog dialog(this, wxID_ANY, _("Close Dialog"));
		wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL);
		sizer->Add(new wxButton(&dialog, wxID_OK, _("OK")));
		dialog.SetSizer(sizer);
		sizer->Fit(&dialog);
		int result = dialog.ShowModal();
		switch(result)
		{
		case wxID_OK:
			Close();
			break;
		case wxID_CANCEL:
			Close();
			break;
		}
		
	}
};

class wxTestApp : public wxApp
{
public:
	virtual bool OnInit()
	{
		wxTestFrame* frame = new wxTestFrame(NULL, _("Test"));
		frame->Show();
		return true;
	}
};

IMPLEMENT_APP(wxTestApp);
Post Reply