gdk绘图时,如何使得pixmap随着窗口尺寸变化而变化?
在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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不是的,我的目的就是尺寸改变时,不清除背景图像
照第一次的程序,尺寸改变后,绘图区就重新绘上了空白矩形,即背景被清除了
你的意思的是随着窗口的尺寸变化,都要清空窗口的背景是吧?
你可以用gdk_window_clear来清除背景,
或者设置drawingarea的背景色,gdk_gc_set_background,gdk_draw_rectangle,高度宽度重新取得就可以了
或者为drawingarea创建1个cairo_t,cairo_set_source_rgb,然后cairo_paint就可以清除drawingarea的内容了