EventBox

Certains éléments graphiques gtkmm n'ont pas de fenêtre-X associée ; ils sont affichés sur les fenêtres parentes. Pour cette raison, ils ne peuvent pas recevoir d'événements. Ainsi, s'ils ne sont pas correctement dimensionnés, ils ne seront pas rognés : vous observez alors des chevauchements désordonnés, etc. Pour recevoir des événements sur un de ces éléments graphiques, placez-le dans un conteneur EventBox et faites appel ensuite à Gtk::Widget::set_events() sur l'objet EventBox avant de l'afficher.

Même si le nom EventBox met en valeur l'aspect gestion des événements, cet élément graphique peut être utilisé pour la délimitation des contours (ou plus ; voir l'exemple ci-dessous).

Le constructeur d'un objet Gtk::EventBox est :

Gtk::EventBox();

L'ajout d'un élément graphique enfant à un EventBox s'effectue avec :

event_box.add(child_widget);

Référence

XV.I.I. Exemple

L'exemple suivant montre deux utilisations d'un EventBox — création d'une étiquette tronquée dans une petite boîte et configuration pour qu'un clic de souris sur l'étiquette fasse quitter le programme. Le redimensionnement de la fenêtre révèle plus ou moins le contenu de l'étiquette.

Figure XV.1 EventBox

Code source

File: examplewindow.h (For use with gtkmm 3, not gtkmm 2)

#ifndef GTKMM_EXAMPLEWINDOW_H
#define GTKMM_EXAMPLEWINDOW_H

#include <gtkmm.h>

class ExampleWindow : public Gtk::Window
{
public:
  ExampleWindow();
  virtual ~ExampleWindow();

protected:
  //Signal handlers:
  virtual bool on_eventbox_button_press(GdkEventButton* event);

  //Child widgets:
  Gtk::EventBox m_EventBox;
  Gtk::Label m_Label;
};

#endif //GTKMM_EXAMPLEWINDOW_H

File: examplewindow.cc (For use with gtkmm 3, not gtkmm 2)

#include "examplewindow.h"

ExampleWindow::ExampleWindow()
: m_Label("Click here to quit, quit, quit, quit, quit")
{
  set_title ("EventBox");
  set_border_width(10);

  add(m_EventBox);

  m_EventBox.add(m_Label);

  //Clip the label short:
  m_Label.set_size_request(110, 20);

  //And bind an action to it:
  m_EventBox.set_events(Gdk::BUTTON_PRESS_MASK);
  m_EventBox.signal_button_press_event().connect(
    sigc::mem_fun(*this, &ExampleWindow::on_eventbox_button_press) );

  m_EventBox.set_tooltip_text("Click me!");

  show_all_children();
}

ExampleWindow::~ExampleWindow()
{
}

bool ExampleWindow::on_eventbox_button_press(GdkEventButton*)
{
  hide();
  return true;
}

File: main.cc (For use with gtkmm 3, not gtkmm 2)

#include "examplewindow.h"
#include <gtkmm/main.h>

int main(int argc, char *argv[])
{
  Gtk::Main kit(argc, argv);

  ExampleWindow window;
  //Shows the window and returns when it is closed.
  Gtk::Main::run(window);

  return 0;
}