Bienvenidos sean a este post, hoy veremos como crear nuestro primer programa basico de C++ con wxWidgets y no es otro que el mitico Hola, Mundo!
En este post vimos como habilitar wxWidgets por lo que les sugiero que en caso de no tenerlo pasen antes por ahi, lo siguiente sera utilizar un editor de texto donde crearemos un nuevo archivo al cual llamaremos holaWx.cpp y le agregaremos el siguiente codigo:
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);
};
IMPLEMENT_APP(MiApp);
bool MiApp::OnInit()
{
MiCuadro * cuadro = new MiCuadro("Hola, Mundo!",
wxPoint(50,50),
wxSize(200,100));
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)
{}
Por si les sucede como a mi, el primer condicional es para indicar cual compilador puede usar para este programa, es decir al indicar GNU le estamos diciendo que utilice las herramientas GNU y sus respectivas extensiones asi como el compilador g, el siguiente include es la encargada de incluir los archivos apropiados para los archivos de encabezados precompilados, esto es para los compiladores que soportan precompilacion, el siguiente condicional verifica si esta definida la macro de Borland C++ y en caso de ser verdadero ejecuta a pragma hdrstop, lo cual nos dara un control total sobre las compilaciones o build.
Por ultimo tenemos un condicional donde verificamos si no esta definido la precompilacion, es decir que no se precompilo a wx_prec.h, y en caso de no estar definido pasamos a incluir wx.h, con esto terminamos la base de precompilacion e inclusion de nuestros programas.
Lo siguiente sera crear una clase llamada MiApp la cual sera heredera de wxApp, en esta clase crearemos solamente un prototipo de OnInit para sobreescribirlo mas adelante.
Despues creamos otra clase que llamaremos MiCuadro y la haremos heredera de wxFrame, dentro de esta crearemos un constructor en la parte publica, este constructor de la clase le enviaremos tres datos:
- titulo, sera de tipo wxString para almacenar el titulo de la ventana
- pos, sera de tipo wxPoint y almacenara la ubicacion de la ventana
- tamano, sera de tipo wxSize y almacenara el tamano de la ventana
Estas clases son propias de wxWidgets pero nos permitiran crear objetos que nos facilitaran el trabajo a la hora de crear y manejar las ventanas, por eso no se preocupen tanto pero nos facilitan como almacenar las coordenadas y valores que necesitamos, con estos tres datos despues veremos para que nos sirven, despues tenemos esta linea:
IMPLEMENT_APP(MiApp);
Esta funcion genera la funcion main o WinMain cuando sea necesario y en este caso le enviamos a nuestra clase MiApp, nuestro siguiente paso sera definir a los prototipos que creamos anteriormente.
Nota: Los tipos son similares a los que usamos con otras librerias o clases propias del lenguaje pero orientadas a wxWidgets, facilitando su utilizacion.
El primero que definiremos es OnInit, en realidad redefiniremos porque esta existe en la clase wxApp, dentro del bloque de la funcion primero crearemos un objeto de tipo MiCuadro al cual llamaremos cuadro, y por medio de new usaremos el constructor que declaramos y le enviamos los siguientes tres datos:
- «Hola, Mundo!», un literal para el titulo de la ventana
- wxPoint(50,50), le enviamos un objeto de tipo wxPoint con las coordenadas
- wxSize(200,100), le enviamos un objeto de tipo wxSize con el tamaño de las ventanas
Lo siguiente es una funcion que se encarga de mostrar o no por medio de un valor booleano, es decir TRUE para mostrarlo o FALSE para esconderlo, la funcion que sigue se encarga de asignarlo como la ventana principal y por ultimo devolvemos un TRUE para indicar que todo esta correcto.
La siguiente funcion que definimos es el constructor de la clase MiCuadro, para ello volvemos a configurar para recibir los tres valores, pero esta vez iniciaremos a wxFrame donde el primer parametro es la ventana padre y por lo general, por no decir siempre, debe ser NULL, el siguiente campo es el identificador y el usar el valor -1 es como indicar un valor predeterminado, luego ira el titulo, la pos (posicion) y el tamano de la ventana, con esto completamos a nuestro programa, pasemos a compilarlo y para ello debemos usar la siguiente linea:
$ g++ holaWx.cpp `wx-config --libs` `wx-config --cflags` -o holaWx
En este caso lo unico que varia es el envio de libs y cflags por medio de wx-config entre el archivo fuente y la salida de -o, despues lo otro es similar a como vinimos trabajando hasta ahora, probemos de compilar y ejecutarlo como se ve en el siguiente video
En el video podemos ver una parte del codigo, como compilarlo con nuestros nuevos parametros y el resultado al ejecutarlo en un entorno de escritorio GNOME.
En resumen, hoy hemos visto como crear nuestra primer ventana en wxWidgets, hemos visto los pasos basicos para definir las macros de carga de los archivos de encabezado, hemos visto algunas lineas para incluir correctamente a wxWidgets, despues hemos creado dos clases que heredan parte del mismo, hemos visto a IMPLEMENT_APP y en que nos ayuda, 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.
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