免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4740 | 回复: 6
打印 上一主题 下一主题

请教GtkDrawingArea重绘被覆盖区域 [复制链接]

|

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-18 11:43 |只看该作者 |倒序浏览
RT
我程序大概是这样子的
刚开始就用gdk_draw_pixbuf把一张图像给绘到drawarea里
然后按照gtk-demo里的例子给他加入"configure_event"和"expose_event"
两个事件两个事件的代码是从gtk-demo里复制过来的
但是做好后发现当我覆盖图片的时候,只恢复gdk_draw_rectangle时画的黑色区域,图片没有恢复
不知道为什么会出现在这样问题.
  1. gboolean scribble_configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer      data)
  2. {
  3.   if (pixmap)   //全局变量
  4.      g_object_unref (pixmap);
  5.      pixmap= gdk_pixmap_new (widget->window, widget->allocation.width, widget->allocation.height,-1);

  6.   gdk_draw_rectangle (pixmap, widget->style->black_gc,TRUE, 0, 0, widget->allocation.width, widget->allocation.height);
  7.    //gdk_draw_pixmap(widget->window, widget->style->bg_gc[GTK_WIDGET_STATE (widget)],pixmap,0,0,0,0,widget->allocation.width,widget->allocation.height);
  8.   return TRUE;
  9. }

  10. gboolean scribble_expose_event (GtkWidget  *widget, GdkEventExpose *event, gpointer        data)
  11. {
  12.   gdk_draw_drawable (widget->window,widget->style->bg_gc[GTK_WIDGET_STATE (widget)],pixmap, event->area.x, event->area.y, event->area.x, event->area.y, event->area.width, event->area.height);
  13.   //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);

  14.   return FALSE;
  15. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2007-07-18 14:59 |只看该作者

感叹 感叹 我感叹

大概很久没有用到GTk了 你用google搜索一些资料
用baidu搜索不到的
我看到你的话题很亲切
应该简单
我今天从办公室溜出来上网
哀叹
|

论坛徽章:
0
3 [报告]
发表于 2007-07-20 09:21 |只看该作者
原帖由 doonething 于 2007-7-18 14:59 发表
大概很久没有用到GTk了 你用google搜索一些资料
用baidu搜索不到的
我看到你的话题很亲切
应该简单
我今天从办公室溜出来上网
哀叹

谢谢你的回复
如果能搜索到答案的话我就不会问大家了
可能是我没有找到要不你给个链接看看啊

论坛徽章:
0
4 [报告]
发表于 2007-07-26 23:59 |只看该作者
gdk_pixmap_new (widget->window, ... ) 并不是以在 widget->window 中显示的内容创建图像。实际上,这里的 widget->window 一般可以用 NULL 来代替,因此创建的是空白图像。

如果想让这个 pixmap 图像存放 widget->window 中显示的内容,需要事先有一步图像拷贝操作。
|

论坛徽章:
0
5 [报告]
发表于 2007-07-27 01:43 |只看该作者
原帖由 whyglinux 于 2007-7-26 23:59 发表
gdk_pixmap_new (widget->window, ... ) 并不是以在 widget->window 中显示的内容创建图像。实际上,这里的 widget->window 一般可以用 NULL 来代替,因此创建的是空白图像。

如果想让这个 pixmap 图像存放  ...

不知道怎么才能把widget->window中显示的内容拷贝到pixmap
其实我要实现的功能就是能在图片上再画一些东西
每当图片被盖住的时候把最后一次保存图像重新绘到widget->window中
这样我就不用自己再重新加载原来的图片再把以前在图片上画的东西一点一点加入进去
还请版主指教

[ 本帖最后由 | 于 2007-7-27 01:49 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2007-07-27 08:14 |只看该作者
GdkPixmap 和 GdkWindow 都是 GdkDrawable,所以不妨试试用 gdk_draw_drawable() 来完成两者之间的拷贝。
|

论坛徽章:
0
7 [报告]
发表于 2007-07-27 09:49 |只看该作者
原帖由 whyglinux 于 2007-7-27 08:14 发表
GdkPixmap 和 GdkWindow 都是 GdkDrawable,所以不妨试试用 gdk_draw_drawable() 来完成两者之间的拷贝。

谢谢我去试试看
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP