Capítulo 1.- ¡Mama! ¡Mama! mira lo que hago...

De doc.ubuntu-es
Revisión a fecha de 17:27 6 jun 2010; Freefri (Discusión | contribuciones)

(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar

Introducción

Este capítulo esta exento de contenidos que puedan servir de mucho para aprender, pero es necesario para poder seguir adelante, por eso el título del capítulo, porque realmente haremos cosas, pero no diremos porque las hacemos, simplemente asumiremos que es necesario hacerlas para poder empezar una aplicación con wxWidgets.

Construcción del programa 0

Bueno, vamos a ver si conseguimos crear nuestro programa cero...

Este va a ser nuestro paso fundamental, de donde empezaremos a crear, supongo que estas familiarizado con el tema de las clases en C++, aun asi iremos poquito a poco...

Bien, parece que lo primero será arrancar nuestro Code::Blocks

  • Por terminal, escribiendo lo siguiente:
    codeblocks %F
    
  • O por los menús:
    Aplicaciones/Programacion/Code::blocks
    

Nada mas arrancar nos da algún consejito, y despues nos invita amablemente a crear un proyecto, asi que dale al dibujito, o vete a:

file/new.../project...

Se que la emocion te embarga...¿pero qué es eso? ¿un wxwidgets project? ¡¡¡Pues cojámoslo!!!

Luego de dar un par de "siguientes" escoge un wxWidgets2.8.x (suponiendo que esa fue la versión que instalaste en el capítulo anterior)

Continuamos hasta la pantalla en la que tengamos que darle un nombre al proyecto. Yo, por limpieza (y porque he probado 100000 IDE's), decidí almacenar estos proyectos en una subcarpeta llamada "proyectos_codeblocks"

Asi pues, vete a tu directorio personal, y crea una carpeta con ese nombre, luego vuelve a codeblocks y mete estos datos: Project title: learn_0.01 Folder to create project in: /home/user/proyectos_codeblocks/ (donde user sera tu usuario) Project file name: Te lo rellenara el Resulting filename: Te lo rellenara el

<<Breve explicación: con esto Code::Blocks te creará la siguiente carpeta: /home/user/proyectos_codeblocks/learn_0.01/, y dentro de esa carpeta, te creará este archivo: learn_0.01.cbp. Bien, cuando quiera retomar tu proyecto, ese será el archivo que deberás abrir>>

Y dale a "next", mete tu nombre y demás datos, y vuelvele a dar a "next", apareciendo la pantalla del Designer... Nosotros no queremos Designer, pues aunque en un principio parece facilitar las cosas, mentira, solo las complica, nosotros vamos a aprender de verdad... Así que elige "None", y "Dialog Based", y dale a "next".

Ahora te aparecerá la pantalla del los compiladores, que esta bien como esta (asumo que te sale el compilador gcc), asi que dale a "next"...

<<Breve explicación: ahora ya esta preparado, tu proyecto se sitúa en /home/user/proyectos_codeblocks/learn_0.01/, y allí es donde deben estar tus *.cpp, y tus *.h. Respecto a los compilados, las versiones release (mas rapidas, pero no permiten debugar) estarán en la subcarpeta bin/Release, y las debug en bin/Debug>>

La última pantalla se refiere al proyecto inicial, nosotros somos unos valientes, asi que le daremos a "Use default..." y a "create empty project"

Bueno, si ves el Code::Blocks, a la izquierda tienes un árbol con tu workspace, pero esta vacío (tal y como le pedimos, porque vamos a aprender ¿no? :-D ). Así que no cabe duda, necesitamos un main, por tanto vamos a ello...

Pincha encima de learn_0.01 en el árbol, y vete a:

file/new.../file...

Y escoge "C/C++ Source", dale a "next" hasta que llegues a la pantalla de darle nombre... Code::blocks en esto esta quizás mal programado, y si le das directamente el nombre, te dirá que no es un directorio válido, así que dale al botoncito que tiene justo a la derecha del campo de texto, y escribe el nombre "main.cpp", y acepta, asi el ya te escribirá la ruta entera. Marca Debug y Release, y Acepta...

Y se te abre el solito... Podras encontrarlo tambien en el arbol expandiendo "learn_0.01->sources->main.cpp"

¡¡¡Pasemos a rellenarlo!!!

Es típico necesitar tarde o temprano las librerias básicas de C, por ello, nuestras dos primeras lineas serán:

#include <math.h>
#include <stdio.h>

(Relax, al final presentaremos el archivo al completo, es por ir viendo el desarrollo)

Y seguidamente querremos las librerías de wxWidgets, por ahora sólo la básica:

#include <wx/wx.h>

Bueno, esto ya es un gran paso, acabamos de importar las primeras librerias, todo un exito vaya :-D (este es el momento en el que te puedes bautizar como papá del programa)

¡¡¡Y ahora a crear nuestra aplicación!!!

Nuestra aplicación será realmente una clase, y como es típico cuando se usan clases, usaremos un archivo cabecera (*.h) y un cpp, el cpp ya lo tenemos (te adelanto que este será un caso un poco especial, pero lo asumiremos, y después ya no volveremos a repetir un abuso asi, ya lo entenderás...)

Asi que repetimos operaciones: file/new.../file... Elegimos C/C++ header Le damos como nombre (recuerda lo de la ruta, usa el botoncito) "main.h", marcamos debug y release, y finalizamos...

Nos sacará unos #define. Estos define son políticas de preprocesado para el compilador, que evitarán que se compile 2 veces nuestra cabecera en caso de que la tengamos incluida en dos archivos distintos. Dejamos los define y escribimos el código dentro de ellos como veremos a continuación:

Lo primero será darla un nombre, en nuestro caso la llamaremos "SampleApp" (como en los ejemplos de wxWidgets):

#ifndef MAIN_H_INCLUDED
#define MAIN_H_INCLUDED

class SampleApp
{
    
};

#endif // MAIN_H_INCLUDED

Ya hemos declarado la clase (de momento, en este post introducimos las cosas un poco addhoc, como verás ahora, pero todo esto forma parte de la documentación de wxWidgets, de la que hablaremos al final). Ahora vamos a hacer que esta clase herede las propiedades de otra clase de wxWidgets (así actuaremos normalmente con cualquier diálogo, lo iras viendo según vayamos introduciendo cosas), esta clase será wxApp, que es la que nos da control sobre una aplicación, quedando nuestro archivo así (novedades en negrita):

 class SampleApp : public wxApp
 {
 };


Bien, y ahora vamos a introducir un método, que será el que nos arranque la aplicación, quedando el archivo así:

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

Bueno, recuperemos nuestro main.cpp, para ello, en el arbol vete a learn_0.01->Sources->main.cpp y hazle doble click...

En fin, ¿qué duda cabe?, necesitamos importar nuestra cabecera que acabamos de crear, asi que nuestra siguiente linea será:

#include "main.h"

Y ahora tenemos que implementar el método que hemos declarado en main.h (recuerda: virtual bool OnInit()):

/**********************************************************************/
/************** This function run the application         *************/
/************** can force some parameters too (p.ej size) *************/
/**********************************************************************/
bool SampleApp::OnInit()
{
	return true; //true == run the app
	//no delete!!! it's implement in destroy();
}

Y ya sólo nos falta hacer la llamada de wxWidgets (esta orden es del todo excepcional, simplemente quédate con que hace falta, porque no repetiremos cosas así muchas veces):

 /**********************************************************************/
 /************** This function run the application         *************/
 /************** can force some parameters too (p.ej size) *************/
 /**********************************************************************/
 IMPLEMENT_APP(SampleApp)
 bool SampleApp::OnInit()
 {
 	return true; //true == run the app
 	//no delete!!! it's implement in destroy();
 }

¡Y ya está!, esta es nuestra primera aplicación, que efectivamente no hace nada... Finalmente main.cpp nos ha quedado asi:

#include <math.h>
#include <stdio.h>
#include <wx/wx.h>
#include "main.h"

/**********************************************************************/
/************** This function run the application         *************/
/************** can force some parameters too (p.ej size) *************/
/**********************************************************************/

IMPLEMENT_APP(SampleApp)

bool SampleApp::OnInit()
{
	return true; //true == run the app
	//no delete!!! it's implement in destroy();
}

Y main.h asi:

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

Ahora vamos a compilar, veras que arriba tienes un icono con una rueda de engranajes azul, ese es el botón de compilar, y justo a su derecha pone <<build target: "Debug">>, así que nada, no te cortes, compila tu version debug, y dale al play, a ver que tal...

No notarás que pase nada, porque no hay nada que pueda pasar, ya que nuestro programa no hace nada, como has podido comprobar...

Ahora vamos a añadir un TopFrame de lo mas básico... ¡¡¡Comenzemos a aprender!!! Pero eso será en el siguiente capítulo...

Unas últimas notas

Todo lo que vamos a hacer a partir de ahora irá fundamentado en la documentacion del API de wxWidgets, que puedes encontrar en multitud de sitios como la de la página oficial: www.wxwidgets.org/docs

Tambien puedes verla en el archivo "wx.chm"...¿Y cómo lo puedo conseguir? pues necesitas un Windows... Vete a la pagina de wxWidgets (la primera que sale en google), y vete a downloads, alli bajate el instalable "wxMSW" En una maquina Windows (por ejemplo con Virtualbox, o en otro ordenador) instálalo... Y vete a DIR/docs/htmlhelp/ y allí lo encontrarás... (DIR es el directorio donde lo instalaste) Para poder verlo en Ubuntu, simplemente instala este paquete:

sudo apt-get install xchm

Necesitarás esa documentación, ya lo verás...

Capítulo 0.- Sobre como instalar wxWidgets y CodeBlocks Nuestra primera interfaz gráfica con CodeBlocks y wxWidgets Capítulo 2.- ¡Esta vivo! ¡vivoooooo! ¡JAJAJA!
Herramientas personales