gdk绘图时,如何使得pixmap随着窗口尺寸变化而变化?

发布于 2022-08-13 20:29:33 字数 1756 浏览 9 评论 2

在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大小),而其他区域都是灰的,不能绘图。
  不知道这样说大家能不能明白,这个问题实在是困扰了我很多天,一直没有进展。希望哪位知道的一定要告诉我啊,先谢谢了!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

や莫失莫忘 2022-08-15 23:48:17

不是的,我的目的就是尺寸改变时,不清除背景图像
照第一次的程序,尺寸改变后,绘图区就重新绘上了空白矩形,即背景被清除了

神也荒唐 2022-08-15 15:18:27

你的意思的是随着窗口的尺寸变化,都要清空窗口的背景是吧?

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文