转载:http://linux.chinaunix.net/techdoc/desktop/2008/06/06/1009668.shtml
GnomeProgram * gnome_program_init(const char * app_id, const char *app_version,
const GnomeModuleInfo *module_info, int argc, char ** argv,const char * first_property_name,...);
typedef struct {
GnomeUIInfoType type;
gchar const * label;
gchar const * hint;
gpointer moreinfo;
gpointer user_data;
gpointer unused_data;
GnomeUIPixmapType pixmap_type;
gconstpointer pixmap_info;
guint accelerator_key;
GtkModifierType ac_modes;
GtkWidget *widget;
} GnomeUIInfo;
type定义菜单元素的类型,值如下:
GNOME_APP_UI_ENDOFINFO 表这是最后一个菜单项
GNOME_APP_UI_ITEM 表示普通菜单项或单选按钮(若前一个是GNOME_APP_UI_RADIOITEMS)
GNOME_APP_UI_TOGGLEITEM 开关按钮或检查框按钮菜单项
GNOME_APP_UI_RADIOITEMS 单选按钮组
GNOME_APP_UI_SUBTREE 表元素是个子菜单,设置moreinfo 指向子菜单数组
GNOME_APP_UI_SEPARATOR 在菜单项中插入分割线
GNOME_APP_UI_HELP 在帮助菜单中创建主题列表
GNOME_APP_UI_BUILDER_DATA 为接下来的项目指定构造数据
GNOME_APP_UI_ITEM_CONFIGURABLE 可配置菜单项
GNOME_APP_UI_SUBTREE_STOCK 除了标签文本需要在gnomelibs目录中查找外
同GNOME_APP_UI_RADIOITEMS
GNOME_APP_UI_INCLUDE 除了项目是包含在当前菜单中而不是作为子菜单外
同GNOME_APP_UI_SUBTREE
moreinfo 对ITEM 和TOGGLEITEM ,指向菜单项被激活时调用的回调函数
对RADIOITEMS 指向一个GnomeUIInfo结构的数组(代表成组单选按钮)
user_data是传递给回调函数的任意指针。
pixmap_type pixmap_info允许我们向菜单项增加一个位图图标
accelerator_key ac_modes帮助我们定义快捷键
菜单创建函数使用widget在内部保持菜单项窗口部件指针。
示例:
//============================================================================
// Name : gnome.cpp
// Author : sky
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C, Ansi-style
//============================================================================
#include
void closeApp (GtkWidget *window, gpointer data)
{
gtk_main_quit;
}
void item_clicked(GtkWidget *widget, gpointer user_data)
{
printf("Item clicked\n");
}
static GnomeUIInfo submenu[] = {
{ GNOME_APP_UI_ITEM, "SubMenu",
"Submenu hint", GTK_SIGNAL_FUNC(item_clicked),
NULL,NULL,0,NULL,0,0,NULL
},
{ GNOME_APP_UI_ENDOFINFO,NULL,
NULL, NULL,
NULL,NULL,0,NULL,0,0,NULL
}
};
static GnomeUIInfo menu[] = {
{ GNOME_APP_UI_ITEM, "menu Item 1",
"menu hint", NULL,
NULL,NULL,0,NULL,0,0,NULL
},
{ GNOME_APP_UI_SUBTREE,"Menu Item 2",
"menu hint", submenu,
NULL,NULL,0,NULL,0,0,NULL
},
{ GNOME_APP_UI_ENDOFINFO,NULL,
NULL, NULL,
NULL,NULL,0,NULL,0,0,NULL
}
};
static GnomeUIInfo menubar[] = {
{ GNOME_APP_UI_SUBTREE, "Toplevel Item",
NULL, menu,NULL,
NULL,0,NULL,0,0,NULL
},
{ GNOME_APP_UI_ENDOFINFO,NULL,
NULL, NULL,
NULL,NULL,0,NULL,0,0,NULL
}
};
int main(int argc, char*argv[]) {
GtkWidget *app;
gnome_program_init("gnome1","1.0",LIBGNOMEUI_MODULE,
argc,argv,GNOME_PARAM_NONE);
app = gnome_app_new("gnome1", "Menu ,Menu, Menu");
gtk_window_set_default_size(GTK_WINDOW(app),300,200);
g_signal_connect(GTK_OBJECT(app),"destroy", GTK_SIGNAL_FUNC(closeApp),NULL);
gnome_app_create_menus(GNOME_APP(app),menubar);
gtk_widget_show(app);
gtk_main();
return 0;
}
-------------------------------------------------------------------
用宏来简化GnomeUIInfo设置
#include
单独菜单项
#define GNOMEUIINFO_MENU_OPEN_ITEM (cb,data)
#define GNOMEUIINFO_MENU_SAVE_ITEM (cb,data)
#define GNOMEUIINFO_MENU_SAVE_AS_ITEM (cb,data)
#define GNOMEUIINFO_MENU_PRINT_ITEM (cb,data)
#define GNOMEUIINFO_MENU_PRINT_SETUP_ITEM (cb,data)
#define GNOMEUIINFO_MENU_CLOSE_ITEM (cb,data)
#define GNOMEUIINFO_MENU_EXIT_ITEM (cb,data)
#define GNOMEUIINFO_MENU_QUIT_ITEM (cb,data)
#define GNOMEUIINFO_MENU_CUT_ITEM (cb,data)
#define GNOMEUIINFO_MENU_COPY_ITEM (cb,data)
#define GNOMEUIINFO_MENU_PASTE_ITEM (cb,data)
#define GNOMEUIINFO_MENU_SELECT_ALL_ITEM (cb,data)
顶层菜单定义
#define GNOMEUIINFO_MENU_FILE_TREE (tree)
#define GNOMEUIINFO_MENU_EDIT_TREE (tree)
#define GNOMEUIINFO_MENU_VIEM_TREE (tree)
#define GNOMEUIINFO_MENU_SETTINGS_TREE (tree)
#define GNOMEUIINFO_MENU_FILES_TREE (tree)
#define GNOMEUIINFO_MENU_WINDOWS_TREE (tree)
#define GNOMEUIINFO_MENU_HELP_TREE (tree)
#define GNOMEUIINFO_MENU_GMAE_TREE (tree)
示例:
//============================================================================
// Name : gnome.cpp
// Author : sky
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C, Ansi-style
//============================================================================
#include
static GnomeUIInfo filemenu[] = {
GNOMEUIINFO_MENU_NEW_ITEM("New", "Menu hint",NULL,NULL),
GNOMEUIINFO_MENU_OPEN_ITEM(NULL,NULL),
GNOMEUIINFO_MENU_PRINT_ITEM(NULL,NULL),
GNOMEUIINFO_MENU_SAVE_AS_ITEM(NULL,NULL),
GNOMEUIINFO_SEPARATOR,
GNOMEUIINFO_MENU_EXIT_ITEM(NULL,NULL),
GNOMEUIINFO_END
};
static GnomeUIInfo editmenu[] = {
GNOMEUIINFO_MENU_FIND_ITEM (NULL,NULL),
GNOMEUIINFO_MENU_COPY_ITEM(NULL, NULL),
GNOMEUIINFO_END
};
static GnomeUIInfo gamemenu[] = {
GNOMEUIINFO_END
};
static GnomeUIInfo menubar[] = {
GNOMEUIINFO_MENU_FILE_TREE(filemenu),
GNOMEUIINFO_MENU_EDIT_TREE(editmenu),
GNOMEUIINFO_MENU_EDIT_TREE(gamemenu),
GNOMEUIINFO_END
};
int main(int argc, char*argv[]) {
GtkWidget *app, *toolbar;
gnome_program_init("gnome1","1.0",LIBGNOMEUI_MODULE,
argc,argv,GNOME_PARAM_NONE);
app = gnome_app_new("gnome1", "Menu ,Menu, Menu");
gtk_window_set_default_size(GTK_WINDOW(app),300,200);
gnome_app_create_menus(GNOME_APP(app),menubar);
gtk_widget_show(app);
gtk_main();
return 0;
}
-----------------------------------------------------------------------
对话框
GtkWidget * gtk_dialog_new_withbuttons(const gchar *title, GtkWindow *parent,
GtkDialogFlags flags,const gchar *first_button_text,...);NULL结尾
flags决定对话框可以拥有的属性组合
GTK_DIALOG_DESTROY_WITH_PARENT
GTK_DIALOG_MODAL
GTK_DIALOG_NO_SEPRATOR
模态对话框:设置GTK_DIALOG_MODAL调用gtk_dialog_run,或者gtk_dialog_run返回值
typedef enum
{
GTK_RESPONSE_NONE =-1,
GTK_RESPONSE_REJECT =-2,
GTK_RESPONSE_ACCEPT =-3,
GTK_RESPONSE_DELETE_EVENT =-4,
GTK_RESPONSE_OK =-5,
GTK_RESPONSE_CANCEL =-6,
GTK_RESPONSE_CLOSE =-7,
GTK_RESPONSE_YES =-8,
GTK_RESPONSE_NO =-9,
GTK_RESPONSE_APPLY =-1,
GTK_RESPONSE_HELP =-1,
}GtkResponseType;
GtkWidget *dialog = gtk_dialog_new_with_buttons(.....);
int result = gtk_dialog_run(GTK_DIALOG(dialog));
switch(result)
{
}
gtk_widget_destroy(dialog);
//GtkMessageDialog
GtkWidget* gtk_message_dialog_new(GtkWindow *parent, GtkDialogFlags flags,
GtkMessageType type,GtkButtonsType buttons, const gchar *message_format,...);
type:
GTK_MESSAGE_INFO
GTK_MESSAGE_WARNING
GTK_MESSAGE_QUESTION
GTK_MESSAGE_ERROR
buttontype:
GTK_BUTTON_OK
GTK_BUTTON_CLOSE
GTK_BUTTON_CANCEL
GTK_BUTTON_YES_NO
GTK_BUTTON_OK_CANCEL
GTK_BUTTON_NONE
--------------------------------------