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 ...
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+
- Page 38 and 39: 14 Capítulo 3. Antecedentes, Estad
- Page 40 and 41: 16 Capítulo 3. Antecedentes, Estad
- Page 42 and 43: Optical FlowRaúl Varas Martínez18
- Page 44 and 45: 20 Capítulo 3. Antecedentes, Estad
- Page 46 and 47: 22 Capítulo 3. Antecedentes, Estad
- Page 48 and 49: 24 Capítulo 3. Antecedentes, Estad
- Page 50 and 51: 26 Capítulo 3. Antecedentes, Estad
- Page 52 and 53: 28 Capítulo 3. Antecedentes, Estad
- Page 54 and 55: 30 Capítulo 3. Antecedentes, Estad
- Page 56 and 57: y =x2+ 2x+ 5mediante el polinomio d
- Page 58 and 59: 34 Capítulo 3. Antecedentes, Estad
- Page 60 and 61: 36 Capítulo 3. Antecedentes, Estad
- Page 62 and 63: 38 Capítulo 3. Antecedentes, Estad
- Page 64 and 65: 40 Capítulo 3. Antecedentes, Estad
- Page 66 and 67: 42 Capítulo 3. Antecedentes, Estad
- Page 68 and 69: 44 Capítulo 3. Antecedentes, Estad
- Page 70 and 71: 46 Capítulo 3. Antecedentes, Estad
- Page 72 and 73: 48 Capítulo 3. Antecedentes, Estad
- Page 74 and 75: 50 Capítulo 3. Antecedentes, Estad
- Page 76 and 77: 52 Capítulo 3. Antecedentes, Estad
- Page 78 and 79: 54 Capítulo 3. Antecedentes, Estad
- Page 80 and 81: 56 Capítulo 3. Antecedentes, Estad
- Page 82 and 83: 58 Capítulo 3. Antecedentes, Estad
- Page 84 and 85: trices para concatenarlas y multipl
- Page 86 and 87: 62 Capítulo 3. Antecedentes, Estad
- Page 90 and 91: 66 Capítulo 3. Antecedentes, Estad
- Page 92 and 93: 68 Capítulo 3. Antecedentes, Estad
- Page 94 and 95: 70 Capítulo 3. Antecedentes, Estad
- Page 96 and 97: 72 Capítulo 3. Antecedentes, Estad
- Page 98 and 99: 74 Capítulo 3. Antecedentes, Estad
- Page 100 and 101: 76 Capítulo 3. Antecedentes, Estad
- Page 102 and 103: 78 Capítulo 3. Antecedentes, Estad
- Page 104 and 105: 80 Capítulo 3. Antecedentes, Estad
- Page 106 and 107: 82 Capítulo 4. Metodología de Tra
- Page 108 and 109: 84 Capítulo 4. Metodología de Tra
- Page 110 and 111: 86 Capítulo 4. Metodología de Tra
- Page 112 and 113: 88 Capítulo 4. Metodología de Tra
- Page 114 and 115: 90 Capítulo 4. Metodología de Tra
- Page 116 and 117: 92 Capítulo 4. Metodología de Tra
- Page 118 and 119: 94 Capítulo 4. Metodología de Tra
- Page 120 and 121: 96 Capítulo 4. Metodología de Tra
- Page 122 and 123: 98 Capítulo 4. Metodología de Tra
- Page 124 and 125: 100 Capítulo 4. Metodología de Tr
- Page 126 and 127: 102 Capítulo 4. Metodología de Tr
- Page 128 and 129: 104 Capítulo 4. Metodología de Tr
- Page 130 and 131: 106 Capítulo 4. Metodología de Tr
- Page 132 and 133: 108 Capítulo 4. Metodología de Tr
- Page 134 and 135: 110 Capítulo 4. Metodología de Tr
- Page 136 and 137: 112 Capítulo 4. Metodología de Tr
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+