Download document (10.35 MB) - Escuela Superior de Informática ...

Download document (10.35 MB) - Escuela Superior de Informática ... Download document (10.35 MB) - Escuela Superior de Informática ...

11.07.2015 Views

64 Capítulo 3. Antecedentes, Estado de la CuestiónPara construir una aplicación GTK+, cada archivo de la aplicación que utilice las funcioneso definiciones de GTK+ debe incluir el archivo gtk/gtk.h, que es el archivo de inclusiónprincipal de GTK+, donde se declaran todas las variables, funciones, estructuras, etc. queserán usadas en el programa. Además, es necesario enlazar la aplicación con un cierto númerode bibliotecas.3.3.1 Inicialización de la aplicaciónEl escribir un programa GTK+ requiere inicializar la biblioteca GTK+ con una llamada ala función gtk init. Los argumentos de la aplicación (argc, argv) se pasan a la función gtk inity se analizan en busca de alguna de las muchas opciones GTK+, que se emplean principalmentepara la depuración./ ∗ I n i c i a l i z a r GTK ∗ /g t k i n i t (& argc , &argv ) ;Esta función es la responsable de inicializar la biblioteca, para que pueda utilizarse, y deestablecer algunos parámetros (como son los colores por defecto), establecer los controladoresde las señales y comprobar los argumentos pasados a la aplicación desde la línea decomandos, buscando alguno de los siguientes:− − d i s p l a y− − debug−l e v e l− − no−xshm− − sync− − show−e v e n t s− − no−show−e v e n t s− − name− − c l a s sCuando encuentre alguno de estos argumentos, lo quita de la lista. De esta forma, en lalista sólo queda aquello que GTK no puede reconocer y quedando para ser tratado por el programalo trate. Así se consigue crear un conjunto de argumentos que son comunes a todas lasaplicaciones basadas en GTK. Después de inicializar GTK+, puede invocarse el resto de lasfunciones de la biblioteca GTK+.

3.3. Toolkits para Interfaces Gráficas de Usuario 653.3.2 Tipos de datos en GTK+Muchos widgets 9 de GTK+ derivan, normalmente, de otros widgets. Por ejemplo, el widgetde botón (GtkButton) se deriva del widget contenedor (GtkContainer), que a su vez sederiva del widget genérico (GtkWidget), que a su vez deriva de un objeto GTK+ (GtkObject).Todas las funciones de creación de widgets devuelven un puntero a un tipo de dato GtkWidget,que es un puntero a un widget genérico y puede necesitar ser convertido para determinadasfunciones de widget. Un widget deriva de otro porque ese widget realiza la mayor parte de lafuncionalidad de otro widget, y además, la funcionalidad propia que lo distingue de los demás.Por ejemplo, la función de GTK+ de creación de un botón devuelve un puntero a un tipode dato GtkWidget, no a un tipo de dato GtkButton. Esto permite que determinadas funcionesgenéricas, como gtk widget show, sean capaces de operar con todos los tipos de widgets. Eldato GtkWidget devuelto por la función GTK+ de creación de un botón puede ser convertidoa un dato GtkButton (utilizando la macro GTK BUTTON) con vistas a emplearlo en funcionesespecíficas de los botones. El mismo dato GtkWidget podría ser convertido en un datoGtkContainer (utilizando la macro GTK CONTAINER) para poderlo utilizar con funcionesde contenedor, porque el botón es un contenedor.Aunque puede pasarse el widget de botón directamente a alguna de las funciones específicasde los botones, el compilador mostrará algún error si se pasa el botón como un widgetgenérico. La correcta programación en GTK+ requiere que se convierta el widget al tipo adecuadoantes de invocar a una función de widget. Todo widget tiene una macro de conversióncon la que puede convertirse un dato GtkWidget en cualquier tipo de widget GTK+.Entre las macros de conversión de tipos, a continuación se detallan algunas de las máscomunes. Estas macros comprueban si puede realizarse la conversión y, en caso afirmativo,la realizan.9 Cada uno de los componentes gráficos de GTK+

3.3. Toolkits para Interfaces Gráficas <strong>de</strong> Usuario 653.3.2 Tipos <strong>de</strong> datos en GTK+Muchos widgets 9 <strong>de</strong> GTK+ <strong>de</strong>rivan, normalmente, <strong>de</strong> otros widgets. Por ejemplo, el widget<strong>de</strong> botón (GtkButton) se <strong>de</strong>riva <strong>de</strong>l widget contenedor (GtkContainer), que a su vez se<strong>de</strong>riva <strong>de</strong>l widget genérico (GtkWidget), que a su vez <strong>de</strong>riva <strong>de</strong> un objeto GTK+ (GtkObject).Todas las funciones <strong>de</strong> creación <strong>de</strong> widgets <strong>de</strong>vuelven un puntero a un tipo <strong>de</strong> dato GtkWidget,que es un puntero a un widget genérico y pue<strong>de</strong> necesitar ser convertido para <strong>de</strong>terminadasfunciones <strong>de</strong> widget. Un widget <strong>de</strong>riva <strong>de</strong> otro porque ese widget realiza la mayor parte <strong>de</strong> lafuncionalidad <strong>de</strong> otro widget, y a<strong>de</strong>más, la funcionalidad propia que lo distingue <strong>de</strong> los <strong>de</strong>más.Por ejemplo, la función <strong>de</strong> GTK+ <strong>de</strong> creación <strong>de</strong> un botón <strong>de</strong>vuelve un puntero a un tipo<strong>de</strong> dato GtkWidget, no a un tipo <strong>de</strong> dato GtkButton. Esto permite que <strong>de</strong>terminadas funcionesgenéricas, como gtk widget show, sean capaces <strong>de</strong> operar con todos los tipos <strong>de</strong> widgets. Eldato GtkWidget <strong>de</strong>vuelto por la función GTK+ <strong>de</strong> creación <strong>de</strong> un botón pue<strong>de</strong> ser convertidoa un dato GtkButton (utilizando la macro GTK BUTTON) con vistas a emplearlo en funcionesespecíficas <strong>de</strong> los botones. El mismo dato GtkWidget podría ser convertido en un datoGtkContainer (utilizando la macro GTK CONTAINER) para po<strong>de</strong>rlo utilizar con funciones<strong>de</strong> contenedor, porque el botón es un contenedor.Aunque pue<strong>de</strong> pasarse el widget <strong>de</strong> botón directamente a alguna <strong>de</strong> las funciones específicas<strong>de</strong> los botones, el compilador mostrará algún error si se pasa el botón como un widgetgenérico. La correcta programación en GTK+ requiere que se convierta el widget al tipo a<strong>de</strong>cuadoantes <strong>de</strong> invocar a una función <strong>de</strong> widget. Todo widget tiene una macro <strong>de</strong> conversióncon la que pue<strong>de</strong> convertirse un dato GtkWidget en cualquier tipo <strong>de</strong> widget GTK+.Entre las macros <strong>de</strong> conversión <strong>de</strong> tipos, a continuación se <strong>de</strong>tallan algunas <strong>de</strong> las máscomunes. Estas macros comprueban si pue<strong>de</strong> realizarse la conversión y, en caso afirmativo,la realizan.9 Cada uno <strong>de</strong> los componentes gráficos <strong>de</strong> GTK+

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!