linux应用程序开发指南之21-19.pdf
《linux应用程序开发指南之21-19.pdf》由会员分享,可在线阅读,更多相关《linux应用程序开发指南之21-19.pdf(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、下载附录A GnomeHello源代码这里是本书中多次用到的 G n o m e H e l l o的源代码。它是学习 G n o m e编程非常好的材料。源代码共分为五个文件,分别是h e l l o.c、a p p.c、a p p.h、m e n u.c以及m e n u.h。A.1 第一部分:hello.c#include#include#include app.hstatic void session_die(GnomeClient*client,gpointer client_data);static gint save_session(GnomeClient*client,gint
2、 phase,GnomeSaveStyle save_style,gint is_shutdown,GnomeInteractStyle interact_style,gint is_fast,gpointer client_data);static int greet_mode=FALSE;static char*message =NULL;static char*geometry=NULL;struct poptOption options=g r e e t ,g,P O P T _ A R G _ N O N E,&g r e e t _ m o d e,0,N_(Say hello
3、to specific people listed on the command line),N U L L,m e s s a g e ,m,P O P T _ A R G _ S T R I N G,&m e s s a g e,0,N_(Specify a message other than Hello,World!),N _(M E S S A G E ),第五部分附录 g e o m e t r y ,0,P O P T _ A R G _ S T R I N G,&g e o m e t r y,0,N_(Specify the geometry of the main wind
4、ow),N _(G E O M E T R Y ),N U L L,0,0,N U L L,0,N U L L,N U L L;int main(int argc,char*argv)GtkWidget*app;poptContext pctx;char*args;int i;GSList*greet=NULL;GnomeClient*client;bindtextdomain(PACKAGE,GNOMELOCALEDIR);t e x t d o m a i n(P A C K A G E);gnome_init_with_popt_table(PACKAGE,VERSION,argc,ar
5、gv,options,0,&pctx);/*参数分析*/args=poptGetArgs(pctx);if(greet_mode&args)i=0;while(argsi!=NULL)greet=g_slist_prepend(greet,argsi);+i;294使用第五部分 附录下载/*Put them in order*/greet=g_slist_reverse(greet);else if(greet_mode&args=NULL)g_error(_(You must specify someone to greet.);else if(args!=NULL)g_error(_(Co
6、mmand line arguments are only allowed with-greet.);e l s e g_assert(!greet_mode&args=NULL);p o p t F r e e C o n t e x t(p c t x);/*会话管理*/client=gnome_master_client();gtk_signal_connect(GTK_OBJECT(client),save_yourself,GTK_SIGNAL_FUNC(save_session),argv0);gtk_signal_connect(GTK_OBJECT(client),die,GT
7、K_SIGNAL_FUNC(session_die),NULL);app=hello_app_new(message,geometry,greet);g _ s l i s t _ f r e e(g r e e t);g t k _ w i d g e t _ s h o w _ a l l(a p p);g t k _ m a i n();return 0;static gintsave_session(GnomeClient*client,gint phase,GnomeSaveStyle save_style,gint is_shutdown,GnomeInteractStyle in
8、teract_style,gint is_fast,gpointer client_data)gchar*argv;guint argc;argv=g_malloc0(sizeof(gchar*)*4);argc=1;argv0=client_data;附录A GnomeHello源代码使用295下载if(message)argv1=-message;argv2=message;argc=3;gnome_client_set_clone_command(client,argc,argv);gnome_client_set_restart_command(client,argc,argv);re
9、turn TRUE;static voidsession_die(GnomeClient*client,gpointer client_data)gtk_main_quit();A.2 第二部分:app.h#ifndef GNOMEHELLO_APP_H#define GNOMEHELLO_APP_H#include GtkWidget*hello_app_new(const gchar*message,const gchar*geometry,GSList*greet);void hello_app_close(GtkWidget*app);#e n d i fA.3 第三部分:app.c#
10、include#include app.h#include menus.h/*保留一个所有打开的窗口的链表*/static GSList*app_list=NULL;static gint delete_event_cb(GtkWidget*w,GdkEventAny*e,gpointer data);static void button_click_cb(GtkWidget*w,gpointer data);GtkWidget*hello_app_new(const gchar*message,const gchar*geometry,GSList*greet)296使用第五部分 附录下载G
11、tkWidget*app;GtkWidget*button;GtkWidget*label;GtkWidget*status;GtkWidget*frame;app=gnome_app_new(PACKAGE,_(Gnome Hello);frame=gtk_frame_new(NULL);button=gtk_button_new();label =gtk_label_new(message?message:_(Hello,World!);gtk_window_set_policy(GTK_WINDOW(app),FALSE,TRUE,FALSE);gtk_window_set_defaul
12、t_size(GTK_WINDOW(app),250,350);gtk_window_set_wmclass(GTK_WINDOW(app),hello,GnomeHello);gtk_frame_set_shadow_type(GTK_FRAME(frame),GTK_SHADOW_IN);gtk_container_set_border_width(GTK_CONTAINER(button),10);gtk_container_add(GTK_CONTAINER(button),label);gtk_container_add(GTK_CONTAINER(frame),button);gn
13、ome_app_set_contents(GNOME_APP(app),frame);status=gnome_appbar_new(FALSE,TRUE,GNOME_PREFERENCES_NEVER);gnome_app_set_statusbar(GNOME_APP(app),status);h e l l o _ i n s t a l l _ m e n u s _ a n d _ t o o l b a r(a p p);g t k _ s i g n a l _ c o n n e c t(G T K _ O B J E C T(a p p),d e l e t e _ e v
14、e n t ,G T K _ S I G N A L _ F U N C(d e l e t e _ e v e n t _ c b),N U L L);g t k _ s i g n a l _ c o n n e c t(G T K _ O B J E C T(b u t t o n),c l i c k e d ,G T K _ S I G N A L _ F U N C(b u t t o n _ c l i c k _ c b),l a b e l);if(geometry!=NULL)gint x,y,w,h;if(gnome_parse_geometry(geometry,&x,
15、&y,&w,&h)if(x!=-1)附录A GnomeHello源代码使用297下载gtk_widget_set_uposition(app,x,y);if(w!=-1)gtk_window_set_default_size(GTK_WINDOW(app),w,h);else g_error(_(Could not parse geometry string%s),geometry);if(greet!=NULL)GtkWidget*dialog;gchar*greetings=g_strdup(_(Special Greetings to:n);GSList*tmp=greet;while(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 应用程序 开发 指南 21 19
限制150内