LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 951|回复: 0

[Gtk+]双缓冲的一小段例子代码

[复制链接]
发表于 2008-10-24 10:18:55 | 显示全部楼层 |阅读模式
/*----------------创建构件-------------------------*/
drawable=gtk_drawing_area_new();

/*----------------设定尺寸-------------------------*/
gtk_drawing_area_size(drawable,200,200);


可绘制区事件
configure_event  ------当建立或者改变尺寸时
expose_event     ------暴光,当绘制构件时,或被遮住部分重新暴露时
                       或者当引用程序产生重新绘制信息时

如果要消除闪烁需要监听以上两个信号






  1. static gint configure_event(GtkWidget *widget, GdkEventConfigure *event)
  2. {      /*---------假设你的窗口可以改变大小-------------------*/
  3.         /*-----释放之前我们建立的pixmap,如果有的话--------*/
  4.         /*---pixmap是一个static GdkPixmap指针-----------*/
  5.        if(pixmap){
  6.               gdk_pixmap_unref(pixmap);
  7.        }
  8.         /*------然后再创建一个新的pixmap-------------*/
  9.        pixmap=gdk_pixmap_new(widget->;window,
  10.                                                   widget->;allocation.width,
  11.                                                   widget->;allocation.height,
  12.                                                   -1);
  13.        return TRUE;
  14. }

  15. expose_event更简单,就是绘制图片就可以了
  16. gint expose_event(GtkWidget *widget,GdkEventExpose *event)
  17. {
  18.         gdk_draw_pixmap(widget->;window,
  19.                 widget->;style->;fg_gc[GTK_WIDGET_STATE(widget)],
  20.                 pixmap,
  21.                 event->;area.x,event->;area.y,
  22.                 event->;area.x,event->;area.y,
  23.                 event->;area.width,event->;area.height);
  24.           return FALSE;
  25. }

复制代码

gtk_widget_draw()函数可以引起expose_event
pixmap实际上就是一个缓冲,平时你可以在他上面绘图而不会影响到前台
需要的时候就把他画上去,这个是你自己激发expose_event,还是系统激发就看你的需求了,比如你可以设置一个定时器,一秒更新一次,或者100毫秒更新一次
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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