Gnome编程,Gtk+3

转载: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
--------------------------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值