Recommended Techniques
This section is simply a gathering of wisdom, general style guidelines and hints for creating gtkmm applications.
Use GNU autoconf and automake! They are your friends :) Automake examines C files, determines how they depend on each other, and generates a Makefile so the files can be compiled in the correct order. Autoconf permits automatic configuration of software installation, handling a large number of system quirks to increase portability.
Subclass Widgets to better organize your code. You should probably subclass your main Window at least. Then you can make your child Widgets and signal handlers members of that class.
Create your own signals instead of passing pointers around. Objects can communicate with each other via signals and signal handlers. This is much simpler than objects holding pointers to each other and calling each other's methods. gtkmm's classes uses special versions of sigc::signal, but you should use normal sigc::signals, as described in the libsigc++ documentation.

Application Lifetime
Most applications will have only one Window, or only one main window. These applications can use the Gtk::Application::run(Gtk::Window&) overload. It shows the window and returns when the window has been hidden. This might happen when the user closes the window, or when your code decides to hide() the window. You can prevent the user from closing the window (for instance, if there are unsaved changes) by overriding Gtk::Window::on_delete_event().
Most of our examples use this technique.

Using a gtkmm widget
Our examples all tend to have the same structure. They follow these steps for using a Widget:
Declare a variable of the type of Widget you wish to use, generally as member variable of a derived container class. You could also declare a pointer to the widget type, and then create it with new in your code. Even when using the widget via a pointer, it's still probably best to make that pointer a member variable of a container class so that you can access it later.
Set the attributes of the widget. If the widget has no default constructor, then you will need to initialize the widget in the initalizer list of your container class's constructor.
Connect any signals you wish to use to the appropriate handlers.
Pack the widget into a container using the appropriate call, e.g. Gtk::Container::add() or pack_start().
Call show() to display the widget.
Gtk::Widget::show() lets gtkmm know that we have finished setting the attributes of the widget, and that it is ready to be displayed. You can use Gtk::Widget::hide() to make it disappear again. The order in which you show the widgets is not important, but we do suggest that you show the top-level window last; this way, the whole window will appear with its contents already drawn. Otherwise, the user will first see a blank window, into which the widgets will be gradually drawn.