📄 sec-pixmaps.html
字号:
managing. Val is the pixmap created using GDK.</P><P>The following is an example of using a pixmap in a button.</P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="100%"><TR><TD><PRECLASS="PROGRAMLISTING">/* example-start pixmap pixmap.c */#include <gtk/gtk.h>/* XPM data of Open-File icon */static const char * xpm_data[] = {"16 16 3 1"," c None",". c #000000000000","X c #FFFFFFFFFFFF"," "," ...... "," .XXX.X. "," .XXX.XX. "," .XXX.XXX. "," .XXX..... "," .XXXXXXX. "," .XXXXXXX. "," .XXXXXXX. "," .XXXXXXX. "," .XXXXXXX. "," .XXXXXXX. "," .XXXXXXX. "," ......... "," "," "};/* when invoked (via signal delete_event), terminates the application. */gint close_application( GtkWidget *widget, GdkEvent *event, gpointer data ){ gtk_main_quit(); return(FALSE);}/* is invoked when the button is clicked. It just prints a message. */void button_clicked( GtkWidget *widget, gpointer data ) { g_print( "button clicked\n" );}int main( int argc, char *argv[] ){ /* GtkWidget is the storage type for widgets */ GtkWidget *window, *pixmapwid, *button; GdkPixmap *pixmap; GdkBitmap *mask; GtkStyle *style; /* create the main window, and attach delete_event signal to terminating the application */ gtk_init( &argc, &argv ); window = gtk_window_new( GTK_WINDOW_TOPLEVEL ); gtk_signal_connect( GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (close_application), NULL ); gtk_container_set_border_width( GTK_CONTAINER (window), 10 ); gtk_widget_show( window ); /* now for the pixmap from gdk */ style = gtk_widget_get_style( window ); pixmap = gdk_pixmap_create_from_xpm_d( window->window, &mask, &style->bg[GTK_STATE_NORMAL], (gchar **)xpm_data ); /* a pixmap widget to contain the pixmap */ pixmapwid = gtk_pixmap_new( pixmap, mask ); gtk_widget_show( pixmapwid ); /* a button to contain the pixmap widget */ button = gtk_button_new(); gtk_container_add( GTK_CONTAINER(button), pixmapwid ); gtk_container_add( GTK_CONTAINER(window), button ); gtk_widget_show( button ); gtk_signal_connect( GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(button_clicked), NULL ); /* show the window */ gtk_main (); return 0;}/* example-end */</PRE></TD></TR></TABLE><P>To load a file from an XPM data file called icon0.xpm in the currentdirectory, we would have created the pixmap thus</P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="100%"><TR><TD><PRECLASS="PROGRAMLISTING"> /* load a pixmap from a file */ pixmap = gdk_pixmap_create_from_xpm( window->window, &mask, &style->bg[GTK_STATE_NORMAL], "./icon0.xpm" ); pixmapwid = gtk_pixmap_new( pixmap, mask ); gtk_widget_show( pixmapwid ); gtk_container_add( GTK_CONTAINER(window), pixmapwid );</PRE></TD></TR></TABLE><P>A disadvantage of using pixmaps is that the displayed object is alwaysrectangular, regardless of the image. We would like to create desktopsand applications with icons that have more natural shapes. Forexample, for a game interface, we would like to have round buttons topush. The way to do this is using shaped windows.</P><P>A shaped window is simply a pixmap where the background pixels aretransparent. This way, when the background image is multi-colored, wedon't overwrite it with a rectangular, non-matching border around ouricon. The following example displays a full wheelbarrow image on thedesktop.</P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="100%"><TR><TD><PRECLASS="PROGRAMLISTING">/* example-start wheelbarrow wheelbarrow.c */#include <gtk/gtk.h>/* XPM */static char * WheelbarrowFull_xpm[] = {"48 48 64 1"," c None",". c #DF7DCF3CC71B","X c #965875D669A6","o c #71C671C671C6","O c #A699A289A699","+ c #965892489658","@ c #8E38410330C2","# c #D75C7DF769A6","$ c #F7DECF3CC71B","% c #96588A288E38","& c #A69992489E79","* c #8E3886178E38","= c #104008200820","- c #596510401040","; c #C71B30C230C2",": c #C71B9A699658","> c #618561856185",", c #20811C712081","< c #104000000000","1 c #861720812081","2 c #DF7D4D344103","3 c #79E769A671C6","4 c #861782078617","5 c #41033CF34103","6 c #000000000000","7 c #49241C711040","8 c #492445144924","9 c #082008200820","0 c #69A618611861","q c #B6DA71C65144","w c #410330C238E3","e c #CF3CBAEAB6DA","r c #71C6451430C2","t c #EFBEDB6CD75C","y c #28A208200820","u c #186110401040","i c #596528A21861","p c #71C661855965","a c #A69996589658","s c #30C228A230C2","d c #BEFBA289AEBA","f c #596545145144","g c #30C230C230C2","h c #8E3882078617","j c #208118612081","k c #38E30C300820","l c #30C2208128A2","z c #38E328A238E3","x c #514438E34924","c c #618555555965","v c #30C2208130C2","b c #38E328A230C2","n c #28A228A228A2","m c #41032CB228A2","M c #104010401040","N c #492438E34103","B c #28A2208128A2","V c #A699596538E3","C c #30C21C711040","Z c #30C218611040","A c #965865955965","S c #618534D32081","D c #38E31C711040","F c #082000000820"," "," .XoO "," +@#$%o& "," *=-;#::o+ "," >,<12#:34 "," 45671#:X3 "," +89<02qwo ","e* >,67;ro ","ty> 459@>+&& ","$2u+ ><ipas8* ","%$;=* *3:.Xa.dfg> ","Oh$;ya *3d.a8j,Xe.d3g8+ "," Oh$;ka *3d$a8lz,,xxc:.e3g54 "," Oh$;kO *pd$%svbzz,sxxxxfX..&wn> "," Oh$@mO *3dthwlsslszjzxxxxxxx3:td8M4 "," Oh$@g& *3d$XNlvvvlllm,mNwxxxxxxxfa.:,B* "," Oh$@,Od.czlllllzlmmqV@V#V@fxxxxxxxf:%j5& "," Oh$1hd5lllslllCCZrV#r#:#2AxxxxxxxxxcdwM* "," OXq6c.%8vvvllZZiqqApA:mq:Xxcpcxxxxxfdc9* "," 2r<6gde3bllZZrVi7S@SV77A::qApxxxxxxfdcM "," :,q-6MN.dfmZZrrSS:#riirDSAX@Af5xxxxxfevo"," +A26jguXtAZZZC7iDiCCrVVii7Cmmmxxxxxx%3g"," *#16jszN..3DZZZZrCVSA2rZrV7Dmmwxxxx&en"," p2yFvzssXe:fCZZCiiD7iiZDiDSSZwwxx8e*>"," OA1<jzxwwc:$d%NDZZZZCCCZCCZZCmxxfd.B "," 3206Bwxxszx%et.eaAp77m77mmmf3&eeeg* "," @26MvzxNzvlbwfpdettttttttttt.c,n& "," *;16=lsNwwNwgsvslbwwvccc3pcfu<o "," p;<69BvwwsszslllbBlllllllu<5+ "," OS0y6FBlvvvzvzss,u=Blllj=54 "," c1-699Blvlllllu7k96MMMg4 "," *10y8n6FjvllllB<166668 "," S-kg+>666<M<996-y6n<8* "," p71=4 m69996kD8Z-66698&& "," &i0ycm6n4 ogk17,0<6666g "," N-k-<> >=01-kuu666> "," ,6ky& &46-10ul,66, "," Ou0<> o66y<ulw<66& "," *kk5 >66By7=xu664 "," <<M4 466lj<Mxu66o "," *>> +66uv,zN666* "," 566,xxj669 "," 4666FF666> "," >966666M "," oM6668+ "," *4 "," "," "};/* When invoked (via signal delete_event), terminates the application */gint close_application( GtkWidget *widget, GdkEvent *event, gpointer data ){ gtk_main_quit(); return(FALSE);}int main (int argc, char *argv[] ){ /* GtkWidget is the storage type for widgets */ GtkWidget *window, *pixmap, *fixed; GdkPixmap *gdk_pixmap; GdkBitmap *mask; GtkStyle *style; GdkGC *gc; /* Create the main window, and attach delete_event signal to terminate * the application. Note that the main window will not have a titlebar * since we're making it a popup. */ gtk_init (&argc, &argv); window = gtk_window_new( GTK_WINDOW_POPUP ); gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (close_application), NULL); gtk_widget_show (window); /* Now for the pixmap and the pixmap widget */ style = gtk_widget_get_default_style(); gc = style->black_gc; gdk_pixmap = gdk_pixmap_create_from_xpm_d( window->window, &mask, &style->bg[GTK_STATE_NORMAL], WheelbarrowFull_xpm ); pixmap = gtk_pixmap_new( gdk_pixmap, mask ); gtk_widget_show( pixmap ); /* To display the pixmap, we use a fixed widget to place the pixmap */ fixed = gtk_fixed_new(); gtk_widget_set_usize( fixed, 200, 200 ); gtk_fixed_put( GTK_FIXED(fixed), pixmap, 0, 0 ); gtk_container_add( GTK_CONTAINER(window), fixed ); gtk_widget_show( fixed ); /* This masks out everything except for the image itself */ gtk_widget_shape_combine_mask( window, mask, 0, 0 ); /* show the window */ gtk_widget_set_uposition( window, 20, 400 ); gtk_widget_show( window ); gtk_main (); return(0);}/* example-end */</PRE></TD></TR></TABLE><P>To make the wheelbarrow image sensitive, we could attach the buttonpress event signal to make it do something. The following few lineswould make the picture sensitive to a mouse button being pressed whichmakes the application terminate.</P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="100%"><TR><TD><PRECLASS="PROGRAMLISTING"> gtk_widget_set_events( window, gtk_widget_get_events( window ) | GDK_BUTTON_PRESS_MASK ); gtk_signal_connect( GTK_OBJECT(window), "button_press_event", GTK_SIGNAL_FUNC(close_application), NULL );</PRE></TD></TR></TABLE></DIV><DIVCLASS="NAVFOOTER"><HRALIGN="LEFT"WIDTH="100%"><TABLEWIDTH="100%"BORDER="0"CELLPADDING="0"CELLSPACING="0"><TR><TDWIDTH="33%"ALIGN="left"VALIGN="top"><AHREF="sec-dialogs.html"><<< Previous</A></TD><TDWIDTH="34%"ALIGN="center"VALIGN="top"><AHREF="gtk-tut.html">Home</A></TD><TDWIDTH="33%"ALIGN="right"VALIGN="top"><AHREF="sec-rulers.html">Next >>></A></TD></TR><TR><TDWIDTH="33%"ALIGN="left"VALIGN="top">Dialogs</TD><TDWIDTH="34%"ALIGN="center"VALIGN="top"><AHREF="ch-miscwidgets.html">Up</A></TD><TDWIDTH="33%"ALIGN="right"VALIGN="top">Rulers</TD></TR></TABLE></DIV> </td> </tr></table> </td> </tr></table></body></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -