#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;
}
GTK进阶学习:事件盒子 源代码
需积分: 10 191 浏览量
2015-01-27
15:45:56
上传
评论
收藏 5KB ZIP 举报
Mike江
- 粉丝: 5234
- 资源: 107
最新资源
- 自动驾驶-状态估计和定位之Error State EKF.pdf
- STM32F103ZET6+北斗
- 程序流程图的说明及图形示例
- FDN5618P-NL-VB一款SOT23封装P-Channel场效应MOS管
- Go语言基础(变量和基本类型).zip
- 基于CYCLONE2 (EP2C8Q) FPGA 设计PLL锁相环设置时钟Verilog源码Quartus工程文件.zip
- FDN372S-NL-VB一款SOT23封装N-Channel场效应MOS管
- date0425111111111111111111111
- 包含贪心算法的定义及python代码部分实现
- 自动驾驶-状态估计和定位之扩展卡尔曼滤波.pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈