gtk编程笔记 2
来源:互联网 发布:淘宝头条一篇多少钱 编辑:程序博客网 时间:2024/06/07 17:42
GTK+中的菜单和工具栏
简单的菜单
#include <gtk/gtk.h>
int main( int argc, char **argv)
{
GtkWidget *window;
GtkWidget *vbox;
GtkWidget *menubar;
GtkWidget *filemenu;
GtkWidget *file;
GtkWidget *quit;
gtk_init( &argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GET_WINDOW(window), 250, 200);
gtk_window_set_title(GTK_WINDOW(window),"menu");
vbox = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(window), vbox);
menubar = gtk_menu_bar_new();//菜单栏
filemenu = gtk_menu_new();//文件菜单栏
file = gtk_menu_item_new_with_label("File");//文件条目
quit = gtk_menu_item_new_with_label("Quit");//退出条目
gtk_menu_item_set_submenu(GTK_MENU_ITEM(file), filemenu);//将filemenu子菜单设置成file的条目
gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), quit);//将quit加入到filemenu菜单
gtk_menu_shell_append(GTK_MENU_SHELL(menubar), file);//将file条目加入到menubar菜单
gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, file);
g_signal_connect_swapped(G_OBJECT(window),"destroy", G_CALLBACK(gtk_main_quit), NULL);//将事件与动作链接到
//一起
g_signal_connect_swapped(G_OBJECT(quit),"activate",G_CALLBACK(gtk_main_quit), NULL):
gtk_widget_show_all(window);
gtk_main();
return 0;
}
添加快捷键
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
int main( int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *vbox;
GtkWidget *menubar;
GtkWidget *filemenu;
GtkWidget *file;
GtkWidget *new;
GtkWidget *open;
GtkWidget *quit;
GtkWidget *sep;
GtkAccelGroup *accel_group = NULL;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(window), 250, 200);
gtk_window_set_title(GTK_WINDOW(window), "menu");
vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), vbox);
menubar = gtk_menu_bar_new();
filemenu = gtk_menu_new();
accel_group = gtk_accel_group_new(); //新建一个accelerator组
gtk_window_add_accel_group(GTK_WINDOW(window), accel_group); //加入窗口
file = gtk_menu_item_new_with_mnemonic("_File"); //添加Alt+f快捷键
new = gtk_image_menu_item_new_from_stock(GTK_STOCK_NEW, NULL);
open = gtk_image_menu_item_new_from_stock(GTK_STOCK_OPEN, NULL);
sep = gtk_separator_menu_item_new();
quit = gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT, accel_group);
gtk_widget_add_accelerator(quit, "activate", accel_group, \
GDK_q, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
//新建一Ctrl+q的快捷键
gtk_menu_item_set_submenu(GTK_MENU_ITEM(file), filemenu);
gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), new);
gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), open);
gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), sep); //加入分割线
gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), quit);
gtk_menu_shell_append(GTK_MENU_SHELL(menubar), file);
gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 3);
g_signal_connect_swapped(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
g_signal_connect(G_OBJECT(quit), "activate", G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
选择菜单
#include <gtk/gtk.h>
void toggle_statusbar(GtkWidget *widget, gpointer statusbar)
{
if( gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)))
{
gtk_widget_show(statusbar);
}
else
{
gtk_widget_hide(statusbar);
}
}
int main( int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *vbox;
GtkWidget *menubar;
GtkWidget *viewmenu;
GtkWidget *view;
GtkWidget *tog_stat;
GtkWidget *statusbar;
gtk_init( &argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(window), 250, 200);
gtk_window_set_title(GTK_WINDOW(window), "view statusbar");
vbox = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(window), vbox);
menubar = gtk_menu_bar_new();
viewmenu = gtk_menu_new();
view = gtk_menu_item_new_with_label("View");
tog_stat = gtk_check_menu_item_new_with_label("View Statusbar");//新建一个选择菜单
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(tog_stat), TRUE);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(view), viewmenu);
gtk_menu_shell_append(GTK_MENU_SHELL(viewmenu), tog_stat);
gtk_menu_shell_append(GTK_MENU_SHELL(menubar), view);
gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 3);
statusbar = gtk_statusbar_new();
gtk_box_pack_end(GTK_BOX(vbox), statusbar, FALSE, TRUE, 1);
g_signal_connect_swapped(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
g_signal_connect(G_OBJECT(tog_stat), "activate", G_CALLBACK(toggle_statusbar), statusbar);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
工具栏
#include <gtk/gtk.h>
int main( int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *vbox;
GtkWidget *toolbar;
GtkToolItem *new;
GtkToolItem *open;
GtkToolItem *save;
GtkToolItem *sep;
GtkToolItem *exit;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(window), 250, 200);
gtk_window_set_title(GTK_WINDOW(window), "toolbar");
vbox = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(window), vbox);
toolbar = gtk_toolbar_new();//新建一工具栏
gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_ICONS);//设置只显示图标
gtk_container_set_border_width(GTK_CONTAINER(toolbar), 2);
new = gtk_tool_button_new_from_stock(GTK_STOCK_NEW);//新建一个按钮
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), new, -1);//将按钮插入工具栏
open = gtk_tool_button_new_from_stock(GTK_STOCK_OPEN);
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), open, -1);
save = gtk_tool_button_new_from_stock(GTK_STOCK_SAVE);
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), save, -1);
sep = gtk_separator_tool_item_new();
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), sep, -1);
exit = gtk_tool_button_new_from_stock(GTK_STOCK_QUIT);
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), exit, -1);
gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 5);
g_signal_connect(G_OBJECT(exit), "clicked",
G_CALLBACK(gtk_main_quit), NULL);
g_signal_connect_swapped(G_OBJECT(window), "destroy",
G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
撤销/重做 (undo/redo)
#include <gtk/gtk.h>
#include <string.h>
void undo_redo(GtkWidget *widget, gpointer item)
{
static int count = 2;
const char *name = gtk_widget_get_name(widget);if ( strcmp(name, "undo") ) {
count++;
} else {
count--;
}
if (count < 0) {
gtk_widget_set_sensitive(widget, FALSE);
gtk_widget_set_sensitive(item, TRUE);
}if (count > 5) {
gtk_widget_set_sensitive(widget, FALSE);
gtk_widget_set_sensitive(item, TRUE);
}
}
int main( int argc, char *argv[])
{GtkWidget *window;
GtkWidget *vbox;GtkWidget *toolbar;
GtkToolItem *undo;
GtkToolItem *redo;
GtkToolItem *sep;
GtkToolItem *exit;
gtk_init(&argc, &argv);window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(window), 250, 200);
gtk_window_set_title(GTK_WINDOW(window), "undoredo");vbox = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(window), vbox);
toolbar = gtk_toolbar_new();
gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_ICONS);gtk_container_set_border_width(GTK_CONTAINER(toolbar), 2);
undo = gtk_tool_button_new_from_stock(GTK_STOCK_UNDO);
gtk_widget_set_name(GTK_WIDGET(undo), "undo");
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), undo, -1);redo = gtk_tool_button_new_from_stock(GTK_STOCK_REDO);
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), redo, -1);sep = gtk_separator_tool_item_new();
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), sep, -1);exit = gtk_tool_button_new_from_stock(GTK_STOCK_QUIT);
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), exit, -1);gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 5);
g_signal_connect(G_OBJECT(undo), "clicked",
G_CALLBACK(undo_redo), redo);g_signal_connect(G_OBJECT(redo), "clicked",
G_CALLBACK(undo_redo), undo);g_signal_connect(G_OBJECT(exit), "clicked",
G_CALLBACK(gtk_main_quit), NULL);g_signal_connect_swapped(G_OBJECT(window), "destroy",
G_CALLBACK(gtk_main_quit), NULL);gtk_widget_show_all(window);
gtk_main();
return 0;
}
- gtk编程笔记 2
- gtk编程笔记 1
- gtk 编程笔记 3
- gtk 编程笔记 4 信号
- GTK+编程入门(2)—GTK+程序结构
- GTK 编程
- GTK编程
- Win64 GTK+3编程【2】GTK+3完…
- gtk学习笔记-gtk入门
- gtk学习笔记-gtk函数
- gtk-3.0学习笔记2-hellword
- GTK编程初谈
- Gtk+国际化编程
- GTK图形编程
- GTK+图形界面编程
- GTK 编程基本步骤
- GTK编程初谈
- GTK+编程应用--日历
- Excel与OWC做报表总结
- visual stutio 系列开发工具怎样安装和部署应用程序
- Ubuntu系统适合本人的自定义配置
- 补码和数的转换(unsigned/char|int)
- 编译UltraVNC时的Debug版本时遇到vncclient.obj : error LNK2019: unresolved external symbol _compress等错误
- gtk编程笔记 2
- IP、ICMP、UDP、TCP 校验和算法
- javascript通过url向jsp页面传递中文参数导致乱码解决方案
- 怎样把QString转换为char *或者相反?
- SpeedButton使用技巧
- Asterisk拨号方案语法基础
- JavaScript学习笔记1—变量和数据类型
- 修改Oracle最大连接数
- OpenCV学习笔记一(CvSeq的使用)