Anuncios

Bienvenidos sean a este post, hasta el post anterior no solo hemos creado una ventana nueva sino que tambien le hemos agregado botones ahora nos toca agregar el menu.

Anuncios

En caso de no tener el codigo que estamos usando, les recomiendo visitar el post anterior y crear el codigo que vimos hasta ahora, nuestra unica modificacion sera en el constructor de MiCuadro donde agregaremos las siguientes lineas despues de creados los botones:

        wxMenu * menuApp = new wxMenu;
        menuApp->Append(ID_Saludar, "& Saludar...");
        menuApp->AppendSeparator();
        menuApp->Append(ID_Salir, "&Salir");

        wxMenuBar * menuBar = new wxMenuBar;
        menuBar->Append(menuApp,"&Aplicacion");

        SetMenuBar(menuBar);
Anuncios
Anuncios

Como pueden ver es bastante simple, primero creamos un objeto de tipo wxMenu llamado menuApp, luego por medio de Append agregaremos los elementos de dicho menu, el primer valor corresponde a un ID del elemento y el siguiente es el texto que mostrara, esto aplica tanto al primer como al segundo elemento, observen que en el medio existe un AppendSeparator que lo unico que hara es agregar un separador entre ambos elementos, obviamente podemos agregar tanto de uno como del otro todos los que necesitemos.

La siguiente parte se encarga de crear un objeto de tipo wxMenuBar para crear la barra de menu a la cual le agregaremos el menu que generamos recien llamado menuApp por medio de Append tambien, por ultimo estableceremos esta barra de menu por medio de SetMenuBar y le pasaremos a menuBar, con esto ya tenemos nuestra barra operativa, veamos como quedo nuestro codigo final y observen especialmente al constructor de MiCuadro:

holaWx.cpp

#ifdef __GNUG__
// #pragma implementation
#endif

#include 

#ifdef __BORLANDC__
#pragma hdrstop
#endif

#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif

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

class MiCuadro : public wxFrame
{
public:
	MiCuadro (const wxString & titulo,
		const wxPoint & pos,
		const wxSize & tamano);
	void EnSalir(wxCommandEvent & evento);
	void EnSaludar(wxCommandEvent & evento);
	DECLARE_EVENT_TABLE()
private:
	wxPanel * m_panel;
	wxButton * m_btnSaludar;
	wxButton * m_btnSalir;
};

enum { ID_Salir = 1, ID_Saludar };

BEGIN_EVENT_TABLE(MiCuadro, wxFrame)
	EVT_BUTTON(ID_Saludar, MiCuadro::EnSaludar)
	EVT_BUTTON(ID_Salir, MiCuadro::EnSalir)
END_EVENT_TABLE()

IMPLEMENT_APP(MiApp)

bool MiApp::OnInit()
{
	MiCuadro * cuadro = new MiCuadro("Hola, Mundo!",
					wxPoint(50,50),
					wxSize(300,200));
	cuadro->Show(TRUE);
	SetTopWindow(cuadro);
	return TRUE;
}

MiCuadro ::MiCuadro(const wxString & titulo,
		const wxPoint & pos,
		const wxSize & tamano):
		wxFrame((wxFrame *) NULL, -1, titulo, pos, tamano)
{
	wxSize tamanoPanel = GetClientSize();
	m_panel = new wxPanel(this, -1, wxPoint(0,0), tamanoPanel);
	int al = tamanoPanel.GetHeight();
	int an = tamanoPanel.GetWidth();

	m_btnSaludar = new wxButton(m_panel,
				   ID_Saludar, _T("Saludos"),
				   wxPoint(an/2 - 80, al/2 - 35),
				   wxSize(70, 30));
	m_btnSalir = new wxButton(m_panel,
				  ID_Salir, _T("Salir"),
				  wxPoint(an/2 + 10, al/2 - 35),
				  wxSize(70, 30));

	wxMenu * menuApp = new wxMenu;
	menuApp->Append(ID_Saludar, "& Saludar...");
	menuApp->AppendSeparator();
	menuApp->Append(ID_Salir, "&Salir");

	wxMenuBar * menuBar = new wxMenuBar;
	menuBar->Append(menuApp,"&Aplicacion");

	SetMenuBar(menuBar);
}

void MiCuadro::EnSalir(wxCommandEvent & WXUNUSED(evento))
{
	Close(TRUE);
}

void MiCuadro::EnSaludar(wxCommandEvent & WXUNUSED(evento))
{
	wxMessageBox("Hola, Mundo con wxWidgets!!!",
			"Hola, Mundo",
			wxOK | wxICON_INFORMATION,
			this);
}

Con todo esto aclarado volvemos a compilarlo con el siguiente comando:

$ g++ holaWx.cpp `wx-config --libs` `wx-config --cflags` -o holaWx

Una vez compilado pasemos a probarlo como se ve en el siguiente video

Anuncios

Con esto cubrimos un agregado de menues basico pero como pudieron observar no ejecuta las acciones simplemente esta ahi como muestrario, para poder agregar interactividad con nuestro menu debemos agregar las siguientes lineas inmediatamente despues de SetMenuBar dentro del constructor de MiCuadro:

        Connect(ID_Salir, wxEVT_COMMAND_MENU_SELECTED,
                wxCommandEventHandler(MiCuadro::EnSalir));
        Connect(ID_Saludar, wxEVT_COMMAND_MENU_SELECTED,
                wxCommandEventHandler(MiCuadro::EnSaludar));
Anuncios
Anuncios

La funcion Connect nos permitira conectar el menu que le pasemos a un evento, en este caso explicaremos uno porque los dos hacen lo mismo pero para distintas funciones, lo primero que informaremos es el ID de nuestro menu, luego usaremos una macro para tome el evento del menu seleccionado, y despues por medio de wxCommandEventHandler le diremos cual funcion debe ejecutar, es decir que para nuestro caso primero informemos el id de salir y luego la funcion relacionada, para despues pasar el id de saludar y su respectiva funcion, si lo compilamos nuevamente con el comando de compilacion obtendremos la siguiente salida

Anuncios

Aca podemos ver como trabaja nuestro nuevo codigo, como hara no solamente tenemos las acciones de los botones sino tambien del menu.

Anuncios

En resumen, hoy hemos visto como agregar un menu a nuestra ventana, como agregar elementos a este menu, como se agrega a nuestra ventana, luego creamos las acciones para interceptar los eventos de nuestro menu y como queda finalmente, espero les haya gustado sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00

Anuncio publicitario