GTK进阶学习:事件盒子
来源:互联网 发布:淘宝哪里改卖家名字 编辑:程序博客网 时间:2024/05/16 10:19
有些控件( 如:标签GtkLabel,图片控件GtkImage 等),不响应GDK事件,相当于鼠标在其上面点击,它是捕获不到的。用户通过事件盒子可以解决这个问题。
事件盒子给控件提供一个GDK窗口来捕获事件。我们把控件放在事件盒子里,当我们用鼠标点击这个控件时,这个事件盒子就能捕获到点击的状态。
事件盒子的创建:
GtkWidget *gtk_event_box_new(void);
返回值:事件盒子指针
把控件添加到事件盒子里:
void gtk_container_add(GtkContainer *container, GtkWidget *widget );
container:容纳控件的事件盒子
widget:要添加的控件
以下例子为,通过事件盒子实现,双击标签改变其内容:
源代码下载:
#include <gtk/gtk.h> // "button_press_event"信号处理函数 gboolean button_pressed( GtkWidget *eventbox, GdkEventButton *event, GtkLabel *label ) { if (event->type == GDK_2BUTTON_PRESS){// 双击 const gchar *text = gtk_label_get_text(label); // 获取label内容 if( text[0] == 'D' ){ gtk_label_set_text(label, "I Was Double-Clicked!"); // 修改 }else{ gtk_label_set_text(label, "Double-Click Me Again!"); } } return FALSE; } int main( int argc, char *argv[] ) { gtk_init(&argc, &argv); GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); // 主窗口 gtk_window_set_title(GTK_WINDOW(window), "Event Box"); // 标题 gtk_container_set_border_width(GTK_CONTAINER(window), 10); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); // 居中显示 gtk_widget_set_size_request(window, 200, 50); // 最小大小 g_signal_connect(window, "destroy",G_CALLBACK(gtk_main_quit), NULL ); GtkWidget *eventbox = gtk_event_box_new(); // 事件盒子的创建 gtk_widget_set_events(eventbox, GDK_BUTTON_PRESS_MASK); // 捕获鼠标点击事件 gtk_container_add( GTK_CONTAINER(window), eventbox ); // 事件盒子放入窗口 GtkWidget *label = gtk_label_new("Double-Click Me!"); // label gtk_container_add( GTK_CONTAINER(eventbox), label ); // label放入事件盒子里 // 处理"button_press_event"信号,把标签label传给回调函数 g_signal_connect(eventbox, "button_press_event", G_CALLBACK(button_pressed), (gpointer)label); gtk_widget_show_all(window); // 显示所有控件 gtk_main(); return 0; }
运行结果:
源码下载:http://download.csdn.net/download/lianghe_work/8946809
转自:
1 0
- GTK进阶学习:事件盒子
- GTK进阶学习:事件盒子
- GTK进阶学习:鼠标事件
- GTK进阶学习:键盘事件
- GTK进阶学习:绘图事件
- GTK进阶学习:鼠标事件
- GTK进阶学习:键盘事件
- GTK进阶学习:绘图事件
- GTK进阶学习:属性改变事件
- GTK进阶学习:属性改变事件
- GTK进阶学习:定时器
- GTK进阶学习:定时器
- GTK学习笔记之盒子布局GtkBox(2)
- GTK进阶学习:改变控件字体大小
- GTK进阶学习:改变控件字体大小
- GTK进阶学习:设置窗口背景图(可指定其大小)
- GTK进阶学习:设置窗口背景图(可指定其大小)
- JavaScript 进阶学习 4 事件
- 卡片动画初体验
- 27个提升效率的iOS开源库推荐
- jar包的生成及运行
- AndroidMaterialDesign动画之Animate View State Changes
- setOnItemSelectedListener、setOnItemClickListener与setOnTouchlistener的区别
- GTK进阶学习:事件盒子
- Android相对布局的属性
- 简单强大的javascript表单验证 - Parsley.js
- log4j使用初窥
- php常用易混淆概念
- Linux学习之Shell基础
- iOS中几种数据持久化方案:我要永远地记住你!
- JAVA CAS原理深度分析
- MCS BFS#1 2015年7月30日