小小千想和您聊一聊

当前位置: 首页> 技术分享> GTK进阶学习:事件盒子

GTK进阶学习:事件盒子

  有些控件( 如:标签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;  
}  

  运行结果:

上一篇:HTML5工具初识之网页编辑器

下一篇:GTK入门学习:glade的环境搭建

QQ技术交流群

千锋物联网官方①群
858310440

加入群聊