#include "holamundo.h"

#define ID_ABOUT 2
#define ID_QUIT 3


/*esta macro es necesaria para que el metodo OnInit() cumpla la funcion de main*/
IMPLEMENT_APP(MiAplicacion)

bool MiAplicacion::OnInit()
{
	// se crea una instancia de la clase MiVentana
	MiVentana *ventana = new MiVentana("Rodrigo Loyola", wxDefaultPosition, wxDefaultSize);
	ventana->Show(TRUE);
	return TRUE;
}

//la primera macro recibe 2 parametros el primero es el nombre de la clase que quiere manejar los eventos y el segundo es el
» nombre de la clase de la cual se hereda el comportamiento
BEGIN_EVENT_TABLE(MiVentana,wxFrame)
EVT_MENU(ID_ABOUT,MiVentana::OnAbout)//captura el evento ID_ABOUT y llama al metodo OnAbout de MiVentana
EVT_MENU(ID_QUIT,MiVentana::OnQuit)
EVT_CLOSE(MiVentana::OnCloseWindow)//captura el evento de cerrar la ventana
END_EVENT_TABLE()

//constructor de mi ventana, el primer parametro de wxFrame es un puntero a la ventana padre 8objeto de tipo wxWindow), el segundo
» es un identificador de la ventana(wxIdWindows) le pasamos -1 y la biblioteca le asigna un identificador por defecto, el resto
» ya se vieron
MiVentana::MiVentana(const wxString& titulo, const wxPoint& posicion, const wxSize& tam):wxFrame(NULL, -1, titulo, posicion, tam)
{
	//menu con su titulo y estilo que indica que se puede desvincular el menu de la ventana
	wxMenu *mi_menu = new wxMenu("titulo de menu",wxMENU_TEAROFF);
	//despues se crea una barra de menu con su titulo y tambien flotante
	wxMenuBar *mi_barra_de_menu = new wxMenuBar(wxMB_DOCKABLE);

	//se crean 2 opciones al menu con su identificador, nombre y texto en la barra de estado
	mi_menu->Append(ID_QUIT,"Cerrar","Cierra la aplicacion");

	mi_menu->Append(ID_ABOUT,"Acerca de","Muestra el dialogo");
	
	mi_barra_de_menu->Append(mi_menu,"Menu");

	this->SetMenuBar(mi_barra_de_menu);
	this->CreateStatusBar(2);
	this->SetStatusText("Bienvenido a wxWidgets!");
}

//maneja el evento de la opcion salir
void MiVentana::OnQuit(wxCommandEvent& event)
{
	//Close no no cierra la ventana sino que genera el metodo wxCloseEvent, pero se ha sobreescrito el metodo OnCloseWindow
	this->Close(TRUE);
}

//esta es una funcion virtual que hemos sobreescrito (para mostrar un mensaje al cerrar la ventana
void MiVentana::OnCloseWindow(wxCommandEvent& event)
{
	//muestra un dialogo con un mensaje pasado al primer parametro, el titulo corresponde al segundo, el tercero es el estilo de
» dialogo y el ultimo es la ventana padre, en este caso MiVentana
	wxMessageBox("Adios mundo!","Bye bye",wxOK|wxICON_INFORMATION,this);

	//el metodo destroy no genera ningun evento solo cierra la ventana. wxWidgets se encarga de todo el proceso de destruir todos los
» objetos
	this->Destroy();
}

//Muestra el mensaje hola mundo
void MiVentana::OnAbout(wxCommandEvent& event)
{
	wxMessageBox("Hola mundo!","Bienvenido a wxwidgets!",wxOK|wxICON_INFORMATION,this);
}

syntax highlighted by Code2HTML, v. 0.9.1