Ajustements
gtkmm dispose de nombreux éléments graphiques pouvant être visuellement ajustés avec la souris ou le clavier, tels les éléments graphiques Range (décrits dans le paragraphe Éléments graphiques à plage de réglage). Il existe également un petit nombre d'éléments graphiques qui n'affichent qu'une partie ajustable d'une zone plus grande, comme l'élément graphique Viewport. Tous ces éléments graphiques sont adossés à un objet Gtk::Adjustment pour définir cette part commune du comportement de leur API.
So that applications can react to changes, for instance when a user moves a scrollbar, Gtk::Adjustment has a value_changed signal. You can then use the get_value() method to discover the new value.

Création d'un objet Adjustment
The Gtk::Adjustment is created by its create() method which is as follows:

Glib::RefPtr<Gtk::Adjustment> Gtk::Adjustment::create(
  double value,
  double lower,
  double upper,
  double step_increment = 1,
  double page_increment = 10,
  double page_size = 0);

The value argument is the initial value of the adjustment, usually corresponding to the topmost or leftmost position of an adjustable widget. The lower and upper arguments specify the possible range of values which the adjustment can hold. The step_increment argument specifies the smaller of the two increments by which the user can change the value, while the page_increment is the larger one. The page_size argument usually corresponds somehow to the visible area of a panning widget. The upper argument is used to represent the bottommost or rightmost coordinate in a panning widget's child.

Facilité d'utilisation des objets Adjustment
Il est possible, grosso modo, de diviser les éléments graphiques à plage de réglage en, d'une part, ceux dont la structure d'ajustement utilise et nécessite des valeurs précises, et ceux, d'autre part, qui considèrent ces valeurs comme des nombres arbitraires.
The group which treats the values as arbitrary numbers includes the Range widgets (Scrollbar and Scale), the ScaleButton widget, and the SpinButton widget. These widgets are typically "adjusted" directly by the user with the mouse or keyboard. They will treat the lower and upper values of an adjustment as a range within which the user can manipulate the adjustment's value. By default, they will only modify the value of an adjustment.
L'autre groupe comprend les éléments graphiques Viewport et ScrolledWindow. Tous ceux-ci utilisent des valeurs en pixels dans leur structure adjustment. Ils sont, en règle générale, « ajustés » indirectement à l'aide de barres de défilement. Comme tous les éléments graphiques utilisant des ajustements peuvent, soit créer leurs propres structures adjustement, soit utiliser celle qui leur est fournie, nous souhaiterons, en règle générale, laisser à cette catégorie particulière d'éléments graphiques le soin de créer elle-même leurs propres structures d'ajustement.
Si vous partagez une structure d'ajustement entre un élément Scrollbar et un élément TextView, la manipulation de la barre de défilement ajustera comme par magie l'élément TextView. Vous pouvez définir cela comme suit :

// creates its own adjustments
Gtk::TextView textview;
// uses the newly-created adjustment for the scrollbar as well
Gtk::Scrollbar vscrollbar (textview.get_vadjustment(), Gtk::ORIENTATION_VERTICAL);

À l'intérieur des ajustements
Oui, dites-vous, c'est bien beau, mais que faire si je souhaite créer mes propres gestionnaires pour répondre à la modification par l'utilisateur d'un élément graphique Range ou SpinButton. Pour avoir accès à la valeur du paramètre value d'un Gtk::Adjustment, utilisez les fonctions membres get_value() et set_value().
Comme mentionné plus haut, Gtk::Adjustment peut émettre des signaux. C'est pourquoi, bien entendu, les mises à jour se font automatiquement quand vous partagez un objet ajustement entre un Scrollbar et un autre élément graphique ajustable ; tous les éléments graphiques ajustables connectent leurs gestionnaires de signaux au signal value_changed de l'ajustement, comme pourrait le faire le programme.
Ainsi, par exemple, avec un élément graphique Scale, si vous voulez modifier la rotation d'une image chaque fois que value change, vous créez une fonction de rappel du type :

void cb_rotate_picture (MyPicture* picture)
{
  picture->set_rotation(adj->get_value());
...

et la connectez à l'ajustement de l'élément graphique Scale ainsi :

adj->signal_value_changed().connect(sigc::bind<MyPicture*>(sigc::mem_fun(*this,
    &cb_rotate_picture), picture));

Que se passe-t-il quand un élément graphique reconfigure les champs upper ou lower de son Adjustment, ou bien, quand un utilisateur ajoute du texte dans un élément graphique texte ? Dans ce cas, l'élément graphique émet le signal changed.
Les éléments graphiques Range connectent habituellement à ce signal un gestionnaire qui modifie leur apparence pour refléter le changement — par exemple, la taille du curseur dans une barre de défilement va croître ou diminuer en proportion inverse de la différence entre les valeurs lower et upper de son Adjustment.
Vous n'aurez probablement pas besoin d'attacher un gestionnaire à ce signal, sauf si vous écrivez un nouveau type d'élément graphique à plage de réglage.

adjustment->signal_changed();