Page 1 of 1

Opening a frame within a menu bar

Posted: Thu Aug 01, 2019 10:00 pm
by bandali99
I created an option in a menu bar to open a particular type of frame. I am having trouble opening the frame, I thought I could use Settopwindow and show however those commands are in myApp.

Code: Select all

void SimpleMenu::Ontwo(wxCommandEvent & event)
{
	wxFrame* frame = new twosplit(NULL); //change four to three or two to change layout

}
My plan is that when you select the type of split you want, a separate window opens with the split you selected. thanks!

Re: Opening a frame within a menu bar

Posted: Fri Aug 02, 2019 1:22 pm
by ONEEYEMAN
Hi,
So what is the problem?
The window is not opening? You handler does not execute? You receive an RT exception?

Thank you.

Re: Opening a frame within a menu bar

Posted: Fri Aug 02, 2019 4:48 pm
by bandali99
I thought I could use

Code: Select all

SetTopWindow(frame); 
frame -> show(true);
but thats only in the myApp library and im using wxFrame. Any ideas or examples as to go about this? thanks!

Re: Opening a frame within a menu bar

Posted: Fri Aug 02, 2019 4:55 pm
by doublemax
You can still call frame->Show()

SetTopWindow() is not really necessary. That just sets the "main" window. This mean that when that window gets destroyed, the application will terminate.

You can also access the unique wxApp instance through wxTheApp from anywhere. (z.B: wxTheApp->SetTopWindow(...) )

Re: Opening a frame within a menu bar

Posted: Fri Aug 02, 2019 6:41 pm
by bandali99
Awesome the code runs with no error, however, when I click two split, three or four the program opens only the 4 split no matter the option...

Code: Select all

Connect(wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED,
		wxCommandEventHandler(SimpleMenu::OnQuit));
	Connect(wxID_ANY, wxEVT_COMMAND_MENU_SELECTED,
		wxCommandEventHandler(SimpleMenu::Ontwo));
	Connect(wxID_ANY, wxEVT_COMMAND_MENU_SELECTED,
		wxCommandEventHandler(SimpleMenu::Onthree));
	Connect(wxID_ANY, wxEVT_COMMAND_MENU_SELECTED,
		wxCommandEventHandler(SimpleMenu::Onfour));
this is how I connected them- am I suppose to create new IDs for each command or is there something else going wrong?

Re: Opening a frame within a menu bar

Posted: Fri Aug 02, 2019 6:52 pm
by evstevemd
What are splits?
Also use Bind instead of Connect

Re: Opening a frame within a menu bar

Posted: Fri Aug 02, 2019 6:56 pm
by bandali99
evstevemd wrote:
Fri Aug 02, 2019 6:52 pm
What are splits?
Also use Bind instead of Connect
splits are window splits oops, I created functions called On two and so on to call for a frame that has a split-screen. splits is the nickname i gave it i guess sorry

I tried using bind and the same output comes out- no matter which option i click the same split screen comes up

Re: Opening a frame within a menu bar

Posted: Fri Aug 02, 2019 6:59 pm
by bandali99
I think I would need to make an event table for this

Re: Opening a frame within a menu bar

Posted: Fri Aug 02, 2019 7:15 pm
by evstevemd
bandali99 wrote:
Fri Aug 02, 2019 6:56 pm
splits are window splits oops, I created functions called On two and so on to call for a frame that has a split-screen. splits is the nickname i gave it i guess sorry
Please put a minimal code describig what you are doing. We can't peep on your machine to see what you are doing!
bandali99 wrote:
Fri Aug 02, 2019 6:56 pm
I tried using bind and the same output comes out- no matter which option i click the same split screen comes up
The advice was not for solving this issue. Avoid connect and event tables. Always use Bind

Re: Opening a frame within a menu bar

Posted: Fri Aug 02, 2019 7:26 pm
by bandali99

Code: Select all

	Bind(wxEVT_COMMAND_MENU_SELECTED, &SimpleMenu::OnQuit, this);
	Bind(wxEVT_COMMAND_MENU_SELECTED, &SimpleMenu::Ontwo, this);
Here is my code for binding the function to the command menu selected

Code: Select all

	menubar = new wxMenuBar;
	file = new wxMenu;
	file->Append(wxID_EXIT, wxT("&Quit"));
	file->Append(wxID_ANY, wxT("&two Screen Split"));
	file->Append(wxID_ANY, wxT("&three Screen Split"));
	file->Append(wxID_ANY, wxT("&four Screen Split"));
	menubar->Append(file, wxT("&File"));
	SetMenuBar(menubar);
here is my code for how I created my menu bar

Code: Select all

void SimpleMenu::Ontwo(wxCommandEvent & event)
{
	wxFrame* frame = new twosplit(NULL); //change four to three or two to change layout
	frame->Show(true);
}
here is my code for my function Ontwo

Did I bind it incorrectly?

Re: Opening a frame within a menu bar

Posted: Fri Aug 02, 2019 7:36 pm
by ONEEYEMAN
Hi,
bandali99 wrote:
Fri Aug 02, 2019 6:41 pm
Awesome the code runs with no error, however, when I click two split, three or four the program opens only the 4 split no matter the option...

Code: Select all

Connect(wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED,
		wxCommandEventHandler(SimpleMenu::OnQuit));
	Connect(wxID_ANY, wxEVT_COMMAND_MENU_SELECTED,
		wxCommandEventHandler(SimpleMenu::Ontwo));
	Connect(wxID_ANY, wxEVT_COMMAND_MENU_SELECTED,
		wxCommandEventHandler(SimpleMenu::Onthree));
	Connect(wxID_ANY, wxEVT_COMMAND_MENU_SELECTED,
		wxCommandEventHandler(SimpleMenu::Onfour));
this is how I connected them- am I suppose to create new IDs for each command or is there something else going wrong?
You should create a unique IDs, yes.
There is no other way to identify the menu you are clicking other than use different IDs.

Thank you.

Re: Opening a frame within a menu bar

Posted: Fri Aug 02, 2019 7:37 pm
by doublemax
No. For menu entries you need unique IDs.

E.g. if you take the "minimal" sample:

Code: Select all

enum
{
    Minimal_Quit = wxID_EXIT,
    Minimal_About = wxID_ABOUT
};

helpMenu->Append(Minimal_About, "&About\tF1", "Show about dialog");
fileMenu->Append(Minimal_Quit, "E&xit\tAlt-X", "Quit this program");
The sample uses a static event table (which is usually easier and less to type) for menu entries. If it used Bind(), it would look like this:

Code: Select all

Bind(wxEVT_MENU, &MyFrame::OnAbout, this, Minimal_About );
Bind(wxEVT_MENU, &MyFrame::OnQuit, this, Minimal_Quit );
So, you need to define unique IDs and use them in both the menu->Append() and Bind() call.

Re: Opening a frame within a menu bar

Posted: Fri Aug 02, 2019 7:42 pm
by bandali99
thanks going to try this now!