GTK常用接口——事件处理

事件处理
//设置控件捕获相应的事件
void        gtk_widget_set_events     (GtkWidget *widget, gint events);
  GDK_BUTTON_PRESS_MASK:鼠标点击
  GDK_BUTTON_RELEASE_MASK:鼠标释放
  GDK_BUTTON_MOTION_MASK:鼠标移动
  GDK_KEY_PRESS_MASK:键盘按下
  GDK_ENTER_NOTIFY_MASK:进入控件区域
//鼠标事件
// 主窗口需要手动捕获鼠标事件
//触发 鼠标点击事件的信号: button_press_event
//触发 鼠标释放事件的信号: button_release_event
//回调函数:
void        callback                 (GtkWidget *widget, GdkEventButton *event, gpointer data);
 event->x,event->y: 得到点击坐标值
 event->button: 鼠标哪个键按下
//触发 鼠标移动事件的信号: motion_notify_event
//回调函数:
void        callback                 (GtkWidget *widget, GdkEventMotion *event, gpointer data);
 event->x,event->y: 得到移动的坐标值
//键盘事件
//主窗口能够自动捕获键盘事件,其中的键值定义在/usr/include/gtk-2.0/gdk/gdkkeysyms.h文件里,如果窗口内有多个控件,一般是顶层容器的key_press_event起作用
//触发 键盘按下事件的信号: key_press_event
//触发 键盘释放事件的信号: key_release_event
//回调函数:
void        callback                 (GtkWidget *widget, GdkEventKey *event, gpointer data);
 event->keyval: 获取按下(释放)键盘键值
//属性改变事件
//当窗口初始化,被移动或拉伸时,自动触发
//触发 属性改变事件的信号: configure_event
//回调函数:
void        callback                 (GtkWidget *widget, GdkEventConfigure *event, gpointer data);
 event->x,event->y: 窗口的起点坐标
 event->width,event->height: 窗口的大小
//事件盒子GtkEventBox
//有些控件,不响应GDK事件,GTK+通过事件盒子给控件提供一个GDK窗口来捕获事件
//创建事件盒子
GtkWidget*  gtk_event_box_new        (void);
//添加控件到事件盒子里
void        gtk_container_add        (GtkContainer *container, GtkWidget *widget);
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GTK是一个用于开发图形用户界面的工具包,它支持多种编程语言,如C、C++、Python等。在GTK中,可以使用GDK库来处理图像。 在开发一个GTK图像处理应用程序时,可以先设计一个基本的界面,包括菜单栏、工具栏和图像显示区域。然后,可以使用GDK库中提供的函数来加载、保存、显示和编辑图像。 下面是一个简单的示例代码,演示如何在GTK应用程序中加载和显示图像: ```c #include <gtk/gtk.h> #include <gdk/gdk.h> void load_image(GtkWidget *widget, gpointer data) { GtkWidget *image = GTK_WIDGET(data); GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file("image.jpg", NULL); gtk_image_set_from_pixbuf(GTK_IMAGE(image), pixbuf); } int main(int argc, char *argv[]) { GtkWidget *window, *vbox, *menu_bar, *file_menu, *file_item, *open_item, *quit_item, *toolbar, *load_button, *image; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), vbox); menu_bar = gtk_menu_bar_new(); gtk_box_pack_start(GTK_BOX(vbox), menu_bar, FALSE, FALSE, 0); file_menu = gtk_menu_new(); file_item = gtk_menu_item_new_with_label("File"); open_item = gtk_menu_item_new_with_label("Open"); quit_item = gtk_menu_item_new_with_label("Quit"); gtk_menu_item_set_submenu(GTK_MENU_ITEM(file_item), file_menu); gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), open_item); gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), quit_item); gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), file_item); toolbar = gtk_toolbar_new(); gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0); load_button = gtk_tool_button_new_from_stock(GTK_STOCK_OPEN); gtk_toolbar_insert(GTK_TOOLBAR(toolbar), load_button, -1); image = gtk_image_new(); gtk_box_pack_start(GTK_BOX(vbox), image, TRUE, TRUE, 0); g_signal_connect(open_item, "activate", G_CALLBACK(load_image), image); g_signal_connect(load_button, "clicked", G_CALLBACK(load_image), image); gtk_widget_show_all(window); gtk_main(); return 0; } ``` 这个示例代码创建了一个包含菜单栏、工具栏和图像显示区域的窗口。当用户选择 “Open” 菜单项或点击工具栏上的 “Open” 按钮时,程序会加载并显示一个名为 “image.jpg” 的图像。 当然,这只是一个简单的示例,实际的图像处理应用程序需要更多的功能和处理能力。但是,通过学习GTK和GDK库的使用,可以很容易地实现一个功能强大的图像处理应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值