|
/*----------------创建构件-------------------------*/
drawable=gtk_drawing_area_new();
/*----------------设定尺寸-------------------------*/
gtk_drawing_area_size(drawable,200,200);
可绘制区事件
configure_event ------当建立或者改变尺寸时
expose_event ------暴光,当绘制构件时,或被遮住部分重新暴露时
或者当引用程序产生重新绘制信息时
如果要消除闪烁需要监听以上两个信号
- static gint configure_event(GtkWidget *widget, GdkEventConfigure *event)
- { /*---------假设你的窗口可以改变大小-------------------*/
- /*-----释放之前我们建立的pixmap,如果有的话--------*/
- /*---pixmap是一个static GdkPixmap指针-----------*/
- if(pixmap){
- gdk_pixmap_unref(pixmap);
- }
- /*------然后再创建一个新的pixmap-------------*/
- pixmap=gdk_pixmap_new(widget->;window,
- widget->;allocation.width,
- widget->;allocation.height,
- -1);
- return TRUE;
- }
- expose_event更简单,就是绘制图片就可以了
- gint expose_event(GtkWidget *widget,GdkEventExpose *event)
- {
- gdk_draw_pixmap(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);
- return FALSE;
- }
复制代码
gtk_widget_draw()函数可以引起expose_event
pixmap实际上就是一个缓冲,平时你可以在他上面绘图而不会影响到前台
需要的时候就把他画上去,这个是你自己激发expose_event,还是系统激发就看你的需求了,比如你可以设置一个定时器,一秒更新一次,或者100毫秒更新一次 |
|