One approach to all of this (and my first exposure to GTK) is to use bindings to GTK from a scripting language, in my case ruby. If this interests you, take a look at my Ruby GTK notes.
But real GTK programming is done in C and if you really want to dive into the details you will need to deal with it on that level and learn a bit about X windows while you are at it.
Some important online resources are:
GTK+ is now out as version 2.0 and there are significant differences from the older 1.2. Some of the best books discuss the 1.x version, but this shouldn't put you off. It would be nicer if the books got updated, but they are still useful and by working hand in hand with the online documents you can work things out.
The relationship between GTK+ and gnome is foggy (as well as why the plus is always appended to GTK, was there ever something without the plus?). GTK is a library of widgets and gnome is a "desktop environment", whatever the heck that is. I think it might have something to do with trying to keep up with Microsoft (a dubious goal at best). I don't care -- I just want to wite GUI software. Someday I will be embarassed by saying all this .... maybe.
And then there is GDK, how does that fit into the whole scheme? Here are the pieces to the puzzle thus far:
On a random note: here is some information on Expose and Focus events.
I have the following four books on GTK programming, and they have been variously useful. You may read reviews that downplay them because they are from the GTK 1.2 era. To my mind this is not an issue, the main thing is that they are will written and cover the basic concepts, not that they give an exact API reference, you will need the online docs for that! The good news is that you can pick these up cheap as used copies.
I particularly like Havoc Pennington's book -- it just seems to be the best organized and is more than a "here is how to put together a bunch of buttons, labels, and entry widgets" kind of book.
Uncle Tom's Computer Info /firstname.lastname@example.org