马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 G0398 于 2014-10-23 17:13 编辑
本讲主要讲解窗口的常用信号处理:
信号类似Windows下的消息,操作系统收到用户交互信息通过封装成信号或消息的方式通知程序,调用程序注册的信号处理过程或消息处理事件进行交互处理
gtk的信号注册中信号名称以字符串形式呈现,例如:g_signal_connect(window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
这里注册了窗口销毁信号,窗口销毁时会调用gtk_main_quit这个函数处理。
在Windows下的消息以宏的方式呈现,比如:#define WM_DESTROY 0x0002
g_signal_connect为信号注册函数,定义在\include\glib-2.0\gobject\gsignal.h 头文件中
第一个参数为widget实例,第二个参数为字符串形式的信号名称,第三个参数为信号处理函数,第四个参数为用户自定义数据。
所有的信号注册都通过这个函数完成。
#include <gtk/gtk.h>
#include <cairo.h>
void window_show(GtkWidget *widget,gpointer data)
{
printf("窗口显示\n");
}
void window_draw(GtkWidget *widget,cairo_t *cr,gpointer data)
{
printf("重绘\n");
}
void window_destroy(GtkWidget *widget,gpointer data)
{
printf("销毁\n");
gtk_main_quit();
}
int main(int argc,char *argv[])
{
GtkWidget *window;
//GTK初始化
gtk_init (&argc, &argv);
//“实例化”一个新窗口
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
//注册信号通知(窗口销毁)
g_signal_connect(window, "destroy", G_CALLBACK(window_destroy), NULL);
//注册信号通知(窗口显示)
g_signal_connect(window, "show", G_CALLBACK(window_show), NULL);
//注册信号通知(窗口重绘)
g_signal_connect(window, "draw", G_CALLBACK(window_draw), NULL);
gtk_window_set_title(GTK_WINDOW(window),"hello fishc");
//显示窗口
gtk_widget_show (window);
//执行消息循环
gtk_main ();
return 0;
}
这里注册了三个信号处理函数:window_destroy,window_show和window_draw
window_destroy为窗口销毁后调用。
window_show为窗口显示后调用,在窗口的生命周期只调用一次,可以用来做一些初始化操作。
window_draw为窗口重绘时调用,用来重新绘制窗口界面。
这三个信号为GtkWidget的处理信号,所有GtkWidget的实例都可以注册这几个信号,不同的widget还有自己特有的信号处理,比如按钮的点击产生的信号:clicked 或 编辑框内容改变触发的信号:changed
下一讲主讲GtkWidget之容器部件
|