GTK+2.0之初始学习篇(二)—— g_signal_connect宏解释及HelloWorld

       GTK+2.0中利用信号/回调函数机制来处理窗口外部传来的事件、消息或信号。

       以下实现的是单击窗口关闭按钮,窗口自动关闭。在程序中调用了gtk_main_quit()函数实现退出主循环。

#include
void on_delete_event(); //函数声明
int main(int argc, char* argv[])
{GtkWidget *window;gtk_init(&argc, &argv);window = gtk_window_new(GTK_WINDOW_TOPLEVEL);/**这里要注意的是g_signal_connect宏.*/g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(on_delete_event), NULL);gtk_window_set_title(GTK_WINDOW(window), "第二个练习窗口例子");gtk_window_set_default_size(GTK_WINDOW(window),500, 100);/**设定窗口的位置在父窗口的中部*/gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);gtk_widget_show(window);gtk_main();return FALSE;
}
/**实现退出主循环
*/
void on_delete_event(GtkWidget *widget, GdkEvent* event, gpointer data)
{gtk_main_quit(); 
}



      g_signal_connect宏是今天学习的目的之一。g_signal_connect宏有4个参数


gulong g_signal_connect( gpointer *object,const gchar *name,GCallback func,gpointer func_data );


      它们分别是连接信号控件的指针(连接的对象)、信号名称、回调函数以及传递给回调函数的参数。而第三个回调函数一般为以下的形式

void callback_func( GtkWidget *widget,  gpointer callback_data );


        第一个参数是指向发出信号的控件指针,第二个参数是g_signal_connect宏的最后一个参数传进来的数据指针。


      接下来我们来学习HelloWorld的代码。在上面的代码里添加HelloWorld。

#include
//函数声明
void on_delete_event();
void on_button_clicked();
//定义单击次数统计
gint data_count = 1;int main(int argc, char* argv[])
{GtkWidget *window;GtkWidget *button;gtk_init(&argc, &argv);window = gtk_window_new(GTK_WINDOW_TOPLEVEL);g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(on_delete_event), NULL);gtk_window_set_title(GTK_WINDOW(window), "Hello World Test");gtk_window_set_default_size(GTK_WINDOW(window),500, 100);gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);gtk_container_set_border_width(GTK_CONTAINER(window),50);button = gtk_button_new_with_label("按下按钮将会显示一行信息:");//响应click事件g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_button_clicked),(gpointer)data_count);gtk_container_add(GTK_CONTAINER(window),button);gtk_widget_show(button);gtk_widget_show(window);gtk_main();return FALSE;
}void on_delete_event(GtkWidget *widget, GdkEvent* event, gpointer data)
{gtk_main_quit(); 
}
/**实现单击显示Hello World 结果以及显示单击的次数data_count
*/
void on_button_clicked(GtkWidget *button, gpointer userdata)
{g_print("Hello,The test for 'Hello World'!");g_print("%d\n", data_count);data_count = data_count + 1;
}


      执行  $gcc -o gtksec ./gtk_sec.c `pkg-config --cflags --libs gtk+-2.0`  

      将会看到程序结果。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部