- 论坛徽章:
- 0
|
请教:gtk显示背景和前景图片时,为什么当把窗口最大化时,背景图却把原先的背景显示了四张,而前景图片显示正常.
现在如何修改以下代码,可以实现在把显示的窗口最大化时,前景图片正常显示,而且背景图片还是只显示一张原先的背景图片
先谢谢了
所有代码如下:
#include <gtk/gtk.h>
int main(int argc, char *argv[])
{
GtkWidget *window = NULL;
GtkWidget *fixed = NULL;
GdkPixbuf *pixbuf = NULL;
GdkPixmap *pixmap = NULL;
GtkWidget *eventbox;
GtkWidget *image;
GdkBitmap *bitmap;
gtk_init(&argc,&argv);
/* Create the window */
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window),"Demo"
gtk_widget_set_app_paintable(window,TRUE);
gtk_widget_realize (window);
//gtk_window_fullscreen(GTK_WINDOW(window));
gtk_widget_set_size_request(window, 800, 600);
g_signal_connect(G_OBJECT (window), "delete_event", G_CALLBACK (gtk_main_quit), NULL);
/* Set window background */
fixed = gtk_fixed_new();
gtk_container_add (GTK_CONTAINER(window), fixed);
//load background
pixbuf = gdk_pixbuf_new_from_file ("1.jpg",NULL);
pixmap = gdk_pixmap_new (fixed->window, gdk_pixbuf_get_width(pixbuf), gdk_pixbuf_get_height(pixbuf), -1);
gdk_pixbuf_render_to_drawable(pixbuf, pixmap,
fixed->style->fg_gc[GTK_STATE_NORMAL],
0,0,0,0,
gdk_pixbuf_get_width(pixbuf),
gdk_pixbuf_get_height(pixbuf),
GDK_RGB_DITHER_NORMAL,0,0);
g_object_unref(pixbuf);
//set background
gdk_window_set_back_pixmap (fixed->window, pixmap, FALSE);
gtk_widget_show(fixed);
/* Create the eventbox */
eventbox = gtk_event_box_new();
gtk_fixed_put (GTK_FIXED (fixed), eventbox, 20, 20);
pixbuf = gdk_pixbuf_new_from_file ("1.png", NULL);
image = gtk_image_new_from_pixbuf (pixbuf);
//NOTE: Here is very important
gdk_pixbuf_render_pixmap_and_mask(pixbuf, &pixmap, &bitmap, 12;
gtk_widget_shape_combine_mask(eventbox, bitmap, 0, 0);
gtk_container_add(GTK_CONTAINER(eventbox), image);
gtk_widget_show(image);
gtk_widget_show(eventbox);
gtk_widget_show(window);
gtk_main();
return FALSE;
}
先谢谢了
[ 本帖最后由 guorong1981 于 2009-3-3 15:34 编辑 ] |
|