鱼C论坛

 找回密码
 立即注册
查看: 2094|回复: 2

[技术交流] C语言GUI程序设计-GTK图文系列-信号处理

[复制链接]
发表于 2014-10-17 15:12:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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之容器部件


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-10-17 19:18:52 | 显示全部楼层
强烈支持,还是很像Qt的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2014-10-30 16:54:27 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 03:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表