GTK+/Começando: diferenças entre revisões

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Edudobay (discussão | contribs)
Edudobay (discussão | contribs)
Linha 350:
== Analisando o Hello World ==
 
Agora que já conhecemos a teoria por trás disso, vamos tornar as coisas mais claras percorrendo todo o código do exemplo ''helloworld''.
 
Esta é a função callback que será chamada quando o botão é pressionado ("clicado"). Aqui, ignoramos tanto o widget quanto os dados, mas não é difícil fazer coisas com eles. O próximo exemplo usará o argumento <tt>data</tt> para nos dizer qual dos botões foi pressionado.
 
static void hello( GtkWidget *widget,
gpointer data )
{
g_print ("Hello World\n");
}
 
O próximo callback é um pouco especial. O evento "delete" ocorre quando o gerenciador de janelas envia esse evento para a aplicação. Podemos escolher o que fazer a respeito desse evento: ignorá-lo, dar algum tipo de resposta (como uma mensagem do tipo "Tem certeza de que deseja sair?") ou simplesmente terminar a aplicação.
 
O valor que você retornar nesse callback informa ao GTK que ação tomar. Retornando TRUE, informamos que não queremos que o sinal "destroy" seja emitido, para que nossa aplicação continue a executar. Retornando FALSE, pedimos a emissão do sinal "destroy", que, por sua vez, chamará nosso tratador de sinal "destroy".
 
static gboolean delete_event( GtkWidget *widget,
GdkEvent *event,
gpointer data )
{
g_print ("delete event occurred\n");
return TRUE;
}
 
Aqui está outra função callback que causa o término do programa, chamando gtk_main_quit(). Essa função diz ao GTK que ele deve sair da função gtk_main assim que ele receber o controle de volta.
 
static void destroy( GtkWidget *widget,
gpointer data )
{
gtk_main_quit ();
}
 
Assumimos que você conhece a função main()… sim, assim como em outras aplicações, toda aplicação GTK terá também uma função dessa.
 
int main( int argc,
char *argv[] )
{
 
Esta próxima parte declara ponteiros para uma estrutura do tipo GtkWidget; esses são usados abaixo para criar uma janela e um botão.
 
GtkWidget *window;
GtkWidget *button;
 
Aqui está nosso gtk_init() novamente. Como antes, essa função inicializa a biblioteca, e interpreta os argumentos de linha de comando encontrados. Os argumentos reconhecidos pelo GTK/GDK são removidos da lista, e <tt>argc</tt> e <tt>argv</tt> são modificados, retirando-se quaisquer rastro da existência desses argumentos, o que permitirá que sua aplicação interprete os argumentos restantes corretamente.
 
gtk_init (&argc, &argv);
 
O método para criar uma nova janela é bastante direto. Aloca-se memória para a estrutura GtkWidget <tt>*window</tt>, de modo que o ponteiro agora aponte para uma estrutura válida. A função prepara uma nova janela, que, no entanto, não será mostrada até que chamemos gtk_widget_show(window) pelo final do nosso programa.
 
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 
<!-- Continuar: Here are two examples ... -->