|
发表于 2005-8-5 15:08:15
|
显示全部楼层
[quote:4d457b71b8="xue_hu2001"]我主要是想实现这样的功能:
1,窗口中含有一个图像,这个图像有4个区域 [/quote]
首先不是特别明白图像有4个区域 是什么意思?我在这个理解就是一幅图分成四块来显示。下面的思路是按照这个来写的。
0.drawarea = gtk_drawing_area_new ();创建一个drawarea
1. pixbuf = gdk_pixbuf_new_from_file ("zhuyaogonglu.jpg",NULL); //创建一个pixbuf
2.pixmap = gdk_pixmap_new (widget->window,
widget->allocation.width,widget->allocation.height,-1);//创建一个pixmap,widget->window就是drawarea的窗口,我在configure_event事件中创建,configure_event会在drawarea显示时调用,看个人喜好了。
3.gdk_draw_pixbuf (pixmap,drawarea->style->white_gc,pixbuf,
0,0,0,0,width,height,0,0,0);//把pixbuf中图片考到pixmap中。这个函数中的src_x,src_y,结合宽、高,就能把pixbuf中的任何一块考贝到pixmap中
5.gdk_draw_drawable (widget->window,
widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
pixmap,
event->area.x, event->area.y,
event->area.x, event->area.y,
event->area.width, event->area.height);//在expose_event事件中调用,显示图片,expose_event在gtk_widget_show_all (window);或每次窗口被别的窗口盖住,当别的窗口离开时会产生这个事件。widget->window还是drawarea的控件窗口。
5.鼠标点击后还是调用3中的gdk_draw_pixbuf,改变src_x,src_y的值(width,height视情况改变),然后调用gtk_widget_queue_draw_area (widget, 0,0, width,height)来产生expost_event事件去调用gdk_draw_drawable来显示新的内容。gtk_widget_queue_draw_area中的widget就是drawarea。 |
|