免费注册 查看新帖 |

Chinaunix

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

gdk绘图时,如何使得pixmap随着窗口尺寸变化而变化? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-23 18:23 |只看该作者 |倒序浏览
在configure_event事件里,网上都是这样写的:

gboolean on_scribble_configure_event(GtkWidget *widget , GdkEventConfigure *event,gpointer data)
{
    if (pixmap)
            g_object_unref (G_OBJECT(pixmap));

    pixmap = gdk_pixmap_new(widget->window ,
                    widget->allocation.width ,
                    widget->allocation.height ,
                    -1);
    gdk_draw_rectangle(pixmap , widget->style->white_gc ,
                    TRUE , 0 , 0 ,
                    widget->allocation.width ,
                    widget->allocation.height);
    return FALSE;
}

   这样就会有个问题,只要窗口尺寸改变,最大化或者拖放窗口,都会新建一个以当前窗口尺寸为宽高的pixmap,并且在上面画了一个空白矩阵。也就是说,原来画的东西都被清除了。

  于是,我就把:

if (pixmap)
            g_object_unref (G_OBJECT(pixmap));

   改成了:

if (pixmap)
            return FALSE;

  这样问题就变成了,窗口尺寸改变后,drawingarea区域只能显示原始窗口大小的pixmap(即创建窗口时,创建的pixmap大小),而其他区域都是灰的,不能绘图。
  不知道这样说大家能不能明白,这个问题实在是困扰了我很多天,一直没有进展。希望哪位知道的一定要告诉我啊,先谢谢了!

论坛徽章:
0
2 [报告]
发表于 2008-10-30 08:47 |只看该作者
你的意思的是随着窗口的尺寸变化,都要清空窗口的背景是吧?

你可以用gdk_window_clear来清除背景,
或者设置drawingarea的背景色,gdk_gc_set_background,gdk_draw_rectangle,高度宽度重新取得就可以了

或者为drawingarea创建1个cairo_t,cairo_set_source_rgb,然后cairo_paint就可以清除drawingarea的内容了

论坛徽章:
0
3 [报告]
发表于 2008-10-30 09:29 |只看该作者
不是的,我的目的就是尺寸改变时,不清除背景图像
照第一次的程序,尺寸改变后,绘图区就重新绘上了空白矩形,即背景被清除了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP