[请教]如何用gtk/gdk编程实现图像的平移?

jackxiang 2009-5-25 15:04 | |
我想把现有的图像(比如:一个点)从作图区的左边移到右边,怎么实现?

我用过expose_event,通过画点 --> 用矩形填充 --> 再在新的位置画点... ... ,但是这样最终貌似只有最终的效果图(要么是矩形,要么是右侧的点),没有中间的动态过程。

向大家请教~~!

下面是一个画正弦曲线的例子,请教大家如何将画曲线的过程动态的显示出来呢?
代码:
#include
#include
static gint expose_event(GtkWidget *widget, GdkEventExpose *event)
{
  int i;
  GdkGC *gc;
  GdkColormap *colormap;
  GdkColor color;

  gc=gdk_gc_new(widget->window);
  colormap=gtk_widget_get_colormap(widget);
  gdk_color_parse("red",&color);
  gdk_color_alloc(colormap,&color);
  gdk_gc_set_foreground(gc,&color);

  /*画正弦曲线*/

  for(i=1;i<400;i++)
  {
        
          gdk_draw_line(widget->window,gc,i,200+100*sin(6.28*i/400),i+1,200+100*sin(6.28*(i+1)/400));
      
  }
  gdk_gc_unref(gc);
  return FALSE;
}

int main(int argc,char **argv)
{
  GtkWidget *win_main, *draw_area;

  gtk_init(&argc,&argv);

  win_main=gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_widget_set_usize(win_main,400,400);

  draw_area = gtk_drawing_area_new();
  gtk_container_add(GTK_CONTAINER(win_main), draw_area);
  gtk_widget_show(draw_area);

  gtk_signal_connect(GTK_OBJECT(draw_area), "expose_event",
                    (GtkSignalFunc) expose_event, NULL);
  gtk_signal_connect (GTK_OBJECT (win_main), "destroy",
  GTK_SIGNAL_FUNC (gtk_exit), NULL);

  gtk_widget_set_events(draw_area, GDK_EXPOSURE_MASK);

  gtk_widget_show(win_main);

  gtk_main();
  return 0;
}

realtang   08-02-03 09:50
This is an event signal, initially emitted when the connected widget becomes fully visible on screen.
Expose events are also generated when a widget has been partially or fully covered by another widget, and is re-exposed.
expose事件只是widget被遮挡后重新出现才发生的或者第一次出现时发生。
在你的这个例子里面,你的这个draw_area在出现在屏幕上以后,才会去调用expose_event函数。
而且事件处理函数都应该是很快执行完的,因为所有的GUI都在一个线程里面,如果像你要求的显示画的过程,那就把其它事件都给阻塞了。
不过你可以采用gtk_widget_queue_draw_area()强制产生expose事件。
另外要补充的,现在的gc就在widget的style对象中,所以不需要new了。

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/1791/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!

评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]