Hi<br>&nbsp;&nbsp; I am using GTK+ to do with my application. I have a bitmap without alpha channel as my background, another bitmap with alpha channel to show above through to see the background. At first, I tried to use gdk to do this, still not succeed yet, always&nbsp; show only the last one gdk_draw_pixbuf invokes in the expose handler.
<br>&nbsp;&nbsp; here is my gdk sample code:<br><br>#include &lt;gtk/gtk.h&gt;<br>#define STD_WIDTH&nbsp;&nbsp;&nbsp; 680<br>#define STD_HEIGHT&nbsp; 480<br><br>static GdkPixbuf * s_basePix;<br>static GdkPixbuf * s_homeMenuPix;<br><br>gboolean on_expose(GtkWidget * widget, 
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; GdkEventExpose * ps,<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; gpointer data)<br>{<br>&nbsp;&nbsp;&nbsp; GdkPixbuf * basePix;<br>&nbsp;&nbsp;&nbsp; GdkPixbuf * homeMenuPix;<br><br>&nbsp;&nbsp;&nbsp; homeMenuPix = s_homeMenuPix;<br>&nbsp;&nbsp;&nbsp; basePix = s_basePix;<br><br>
&nbsp;&nbsp;&nbsp; gdk_draw_pixbuf(widget-&gt;window, widget-&gt;style-&gt;bg_gc[GTK_STATE_NORMAL],<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; s_basePix, 0, 0, 0, 0, <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; STD_WIDTH, <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; STD_HEIGHT,<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; GDK_RGB_DITHER_NONE,
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 0, 0);<br><br>&nbsp;&nbsp;&nbsp; gdk_draw_pixbuf(widget-&gt;window, widget-&gt;style-&gt;bg_gc[GTK_STATE_NORMAL],<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; s_homeMenuPix, 0, 0, 0, 0, <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; STD_WIDTH, <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; STD_HEIGHT,
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; GDK_RGB_DITHER_NONE,<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 0, 0);<br><br>&nbsp;&nbsp;&nbsp; return FALSE;<br>}<br><br><br>int main(int argc, char * argv[])<br>{<br>&nbsp;&nbsp;&nbsp; GtkWidget * mainWnd&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; = NULL;<br>&nbsp;&nbsp;&nbsp; GdkDrawable *&nbsp;&nbsp;&nbsp; pixMap&nbsp;&nbsp;&nbsp; = NULL;
<br>&nbsp;&nbsp;&nbsp; GtkWidget * img&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; = NULL;<br>&nbsp;&nbsp;&nbsp; GtkWidget * box&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; = NULL;<br>&nbsp;&nbsp;&nbsp; GtkWidget * button&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; = NULL;<br>&nbsp;&nbsp;&nbsp; GdkBitmap&nbsp;&nbsp;&nbsp; &nbsp; * msk&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; = NULL;<br>&nbsp;&nbsp;&nbsp; GdkBitmap * homeMenu&nbsp;&nbsp;&nbsp; = NULL;<br>&nbsp;&nbsp;&nbsp; GdkColormap&nbsp;&nbsp;&nbsp; &nbsp; * colorMap = NULL;
<br>&nbsp;&nbsp;&nbsp; GdkScreen&nbsp;&nbsp;&nbsp; * screen&nbsp;&nbsp;&nbsp; = NULL;<br><br>&nbsp;&nbsp;&nbsp; gtk_init(&amp;argc, &amp;argv);<br><br>&nbsp;&nbsp;&nbsp; mainWnd = gtk_window_new(GTK_WINDOW_TOPLEVEL);<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; gtk_window_set_title(GTK_WINDOW(mainWnd), &quot;test draw...\n&quot;);&nbsp;&nbsp;&nbsp; 
<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; gtk_signal_connect(GTK_OBJECT(mainWnd), &quot;destroy&quot;, gtk_main_quit, NULL);<br><br>&nbsp;&nbsp;&nbsp; img = gtk_image_new();<br>&nbsp;&nbsp;&nbsp; gtk_container_add(GTK_CONTAINER(mainWnd), img);<br>&nbsp;&nbsp;&nbsp; gtk_signal_connect(GTK_OBJECT(img), 
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &quot;expose-event&quot;,<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; GTK_SIGNAL_FUNC(on_expose),<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; NULL);<br><br>&nbsp;&nbsp;&nbsp; gtk_container_set_border_width(GTK_CONTAINER(mainWnd), 5);<br><br>&nbsp;&nbsp;&nbsp; gtk_widget_show_all(mainWnd);
<br><br>&nbsp;&nbsp;&nbsp; screen = gdk_screen_get_default();<br>&nbsp;&nbsp;&nbsp; colorMap = gdk_screen_get_rgba_colormap(screen);<br>&nbsp;&nbsp;&nbsp; if(!colorMap)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; colorMap = gdk_screen_get_rgb_colormap(screen);<br><br>&nbsp;&nbsp;&nbsp; homeMenu = gdk_pixmap_create_from_xpm(mainWnd-&gt;window,
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &amp;msk,<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &amp;mainWnd-&gt;style-&gt;bg[GTK_STATE_NORMAL],<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &quot;f:/homemenu.bmp&quot;);
<br>&nbsp;&nbsp;&nbsp; s_homeMenuPix =<br>&nbsp;&nbsp;&nbsp; gdk_pixbuf_get_from_drawable(s_homeMenuPix,<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;homeMenu, <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;colorMap,<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;0, 0, 0, 0, <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;STD_WIDTH,
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;STD_HEIGHT);<br><br>&nbsp;&nbsp;&nbsp; pixMap = gdk_pixmap_create_from_xpm(mainWnd-&gt;window, <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &amp;msk, <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &amp;mainWnd-&gt;style-&gt;bg[GTK_STATE_NORMAL],
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;f:/Sunset.bmp&quot;);<br>&nbsp;&nbsp;&nbsp; s_basePix =<br>&nbsp;&nbsp;&nbsp; gdk_pixbuf_get_from_drawable(s_basePix,<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;pixMap, <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;colorMap,
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;0, 0, 0, 0, <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;STD_WIDTH,<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;STD_HEIGHT);<br><br>&nbsp;&nbsp;&nbsp; gtk_main();<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; return 0;<br>}<br><br>I have posted this to gtk maillist, but noone reply. 
<br>Is there any cairo api can help me to composite pixbuf as my expect.<br>Any advice would be appreciated!<br><br><br>Laowb<br><br><br><br>&nbsp;<br><br><br>