Personally I implement the UI in as thin a layer as can be architected and reimplement for every platform. It's the best way, and probably cheaper for most apps than trying to force some lowest common denominator library to express what you want in high fidelity.
I didn't understand this. When you say you implement the UI as a thin layer do you mean you wrap only the few controls you need?
GLib is a utility library; it provides things like container types, filesystem access, networking utilities, threads, object-oriented programming with events and properties, and other similar functions in a platform-independent manner. GTK+ uses GLib. You can use GLib on its own as well. It won't solve the problem of GTK+ being clunky on Windows, though.
I thought that was GLib, and GTK+ was using GLib to implement controls.
Which library does one need to build their own controls?