包含:布局 组件盒、菜单、图标、图片、背景颜色、修改字体及大小
#include <gtk-2.0/gtk/gtk.h>//同时装有2.0和3.0需要指明路径
static void on_draw(GtkWidget *widget, cairo_t *cr, gpointer data) {
// 在这里添加自定义的绘制逻辑
}
void destroy(GtkWidget *widget, gpointer data)
{
gtk_main_quit();
}
GdkPixbuf * create_pixbuf(const gchar *filename)
{
GdkPixbuf *pixbuf;
GError *error = NULL;
pixbuf = gdk_pixbuf_new_from_file(filename, &error);
if(!pixbuf)
{
fprintf(stderr,"%s\n",error->message);
g_error_free(error);
}
return pixbuf;
}
int main(int argc, char **argv)
{
gtk_init(NULL, NULL);
/**********创建窗口***************************/
GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_set_usize(window,880,520);//窗口大小
gtk_container_set_border_width(GTK_CONTAINER(window),0);//边界宽度
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);/*窗口位置在中间*/
gtk_window_set_resizable(GTK_WINDOW(window), FALSE);//窗口伸缩设置,FALSE不可伸缩
GtkWidget* vbox = gtk_vbox_new(FALSE,0);//纵向盒
g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(destroy),NULL);//关闭退出
gtk_window_set_icon(GTK_WINDOW(window),create_pixbuf("IDR_MAINFRAIMNEW.ico"));//任务栏图标
/**********菜单栏***************************/
GtkWidget* menubar = gtk_menu_bar_new();//菜单栏
GtkWidget* menu_dev = gtk_menu_new();
GtkWidget* menu_dev_name = gtk_menu_item_new_with_label("设备管理");
GtkWidget* downmenu_dev1 = gtk_menu_item_new_with_label("获取设备信息");
GtkWidget* downmenu_dev2 = gtk_menu_item_new_with_label("获取设备状态");
GtkWidget* downmenu_dev3 = gtk_menu_item_new_with_label("获取设备配置");
GtkWidget* downmenu_dev4 = gtk_menu_item_new_with_label("设备初始化");
GtkWidget* downmenu_dev5 = gtk_menu_item_new_with_label("设备自检");
gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_dev_name), menu_dev);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_dev), downmenu_dev1);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_dev), downmenu_dev2);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_dev), downmenu_dev3);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_dev), downmenu_dev4);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_dev), downmenu_dev5);
GtkWidget* menu_role = gtk_menu_new();
GtkWidget* menu_role_name = gtk_menu_item_new_with_label("用户管理");
GtkWidget* downmenu_role1 = gtk_menu_item_new_with_label("添加用户");
GtkWidget* downmenu_role2 = gtk_menu_item_new_with_label("删除用户");
GtkWidget* downmenu_role3 = gtk_menu_item_new_with_label("登录用户");
GtkWidget* downmenu_role4 = gtk_menu_item_new_with_label("登出用户");
GtkWidget* downmenu_role5 = gtk_menu_item_new_with_label("设置用户口令");
GtkWidget* downmenu_role6 = gtk_menu_item_new_with_label("获取用户信息");
gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_role_name), menu_role);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_role), downmenu_role1);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_role), downmenu_role2);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_role), downmenu_role3);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_role), downmenu_role4);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_role), downmenu_role5);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_role), downmenu_role6);
GtkWidget* menu_key = gtk_menu_new();
GtkWidget* menu_key_name = gtk_menu_item_new_with_label("密钥管理");
GtkWidget* downmenu_key1 = gtk_menu_item_new_with_label("备份设备密钥");
GtkWidget* downmenu_key2 = gtk_menu_item_new_with_label("恢复设备密钥");
gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_key_name), menu_key);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_key), downmenu_key1);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_key), downmenu_key2);
gtk_menu_bar_insert(GTK_MENU_BAR(menubar), menu_dev_name,0);//菜单栏插入菜单项
gtk_menu_bar_insert(GTK_MENU_BAR(menubar), menu_role_name,1);
gtk_menu_bar_insert(GTK_MENU_BAR(menubar), menu_key_name,2);
//gtk_menu_bar_prepend(GTK_MENU_BAR(menubar), menu_key_name);//菜单栏从前往后插入菜单项
//gtk_menu_bar_append(GTK_MENU_BAR(menubar), menu_dev_name);
//gtk_menu_bar_append(GTK_MENU_BAR(menubar), menu_role_name);
//gtk_menu_bar_append(GTK_MENU_BAR(menubar), menu_key_name);
GtkWidget* labelchild1 = gtk_bin_get_child(GTK_BIN(menu_dev_name));//获取menu中的label控件
GtkWidget* labelchild2 = gtk_bin_get_child(GTK_BIN(menu_role_name));//获取menu中的label控件
GtkWidget* labelchild3 = gtk_bin_get_child(GTK_BIN(menu_key_name));//获取menu中的label控件
PangoFontDescription *font_desc = pango_font_description_from_string("宋体 10");//改菜单字体
pango_font_description_set_size (font_desc, 12 * PANGO_SCALE);
gtk_widget_modify_font (GTK_WIDGET(labelchild1), font_desc);
gtk_widget_modify_font (GTK_WIDGET(labelchild2), font_desc);
gtk_widget_modify_font (GTK_WIDGET(labelchild3), font_desc);
pango_font_description_free (font_desc);
GdkColor color;
gdk_color_parse ("SkyBlue2", &color);//获取颜色信息
gtk_widget_modify_bg(menubar,GTK_STATE_NORMAL, &color);//修改背景颜色
gtk_widget_modify_bg(menu_dev,GTK_STATE_NORMAL, &color);//修改背景颜色
gtk_widget_modify_bg(menu_role,GTK_STATE_NORMAL, &color);//修改背景颜色
gtk_widget_modify_bg(menu_key,GTK_STATE_NORMAL, &color);//修改背景颜色
gtk_box_pack_start(GTK_BOX(vbox),menubar,FALSE,FALSE,0);
/**********下方工作区域**********************************/
GtkWidget* image = gtk_image_new_from_file("img.png");
gtk_box_pack_start(GTK_BOX(vbox),image,FALSE,FALSE,0);
gtk_container_add(GTK_CONTAINER(window),vbox);//垂直布局
//g_signal_connect(G_OBJECT(window),"delete event",G_CALLBACK(gtk_main_quit),NULL);//空间和消息函数创建关联
gtk_window_set_title(GTK_WINDOW(window),"初始化工具");
gtk_widget_show_all(window);
gtk_main();
return 0;
}
gcc -o test main.c `pkg-config --cflags --libs gtk+-2.0` //编译程序
./test //运行程序
运行结果展示: