UIManager

A continuación debe crear un UIManager y añadirle el ActionGroup con insert_action_group(). En este punto, también es una buena idea decirle a la ventana madre que responda a los atajos del teclado especificados, usando add_accel_group().

Por ejemplo,

Glib::RefPtr<Gtk::UIManager> m_refUIManager =
    Gtk::UIManager::create();
m_refUIManager->insert_action_group(m_refActionGroup);
add_accel_group(m_refUIManager->get_accel_group());

Luego, puede definir la distribución visible real de los menús y las barras de herramientas, y añadírsela al UIManager. Esta «cadena de IU» usa un formato XML, en el que debe mencionar los nombre de las acciones que ya ha creado. Por ejemplo:

Glib::ustring ui_info =
    "<ui>"
    "  <menubar name='MenuBar'>"
    "    <menu action='MenuFile'>"
    "      <menuitem action='New'/>"
    "      <menuitem action='Open'/>"
    "      <separator/>"
    "      <menuitem action='Quit'/>"
    "    </menu>"
    "    <menu action='MenuEdit'>"
    "      <menuitem action='Cut'/>"
    "      <menuitem action='Copy'/>"
    "      <menuitem action='Paste'/>"
    "    </menu>"
    "  </menubar>"
    "  <toolbar  name='ToolBar'>"
    "    <toolitem action='Open'/>"
    "    <toolitem action='Quit'/>"
    "  </toolbar>"
    "</ui>";

m_refUIManager->add_ui_from_string(ui_info);

Recuerde que estos nombres son sólo identificadores que se usaron cuando se crearon las acciones. No son el texto que el usuario verá en los menús y barras de herramientas. Se han proporcionado esos nombres legibles por el humano cuando se crearon las acciones.

Para instanciar una Gtk::MenuBar o una Gtk::Toolbar, a la que en realidad puede mostrar, debe usar el método UIManager::get_widget(), y luego añadirle el widget a un contenedor. Por ejemplo:

Gtk::Widget* pMenubar = m_refUIManager->get_widget("/MenuBar");
pBox->add(*pMenuBar, Gtk::PACK_SHRINK);