|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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之容器部件
|
|