There is always low level stuff and very high level stuff and a gradual transition between the two. On windows if we speak of GUI the lowest level is the WinAPI that is a procedural C interface (located mostly in the user and gdi libraries) and the interface of a really good high level gui framework implementation is usually object oriented and it has usually nothing to do with the pure C WinAPI gui interface of windows.
A high level framework (like Qt, java swing, Delphi, .Net gui frameworks) may seem to be hard to use at first if you are used to using winapi or MFC but after learning them (and the MVC pattern they make use of) these higher level frameworks are much better and its much easier to write nicer/reusable code with them. Not to mention that most good high level libs give you tools to visually edit the windows (in a much better way then the winapi dialog resource editor used in winapi and mfc). The high level APIs usually hide the low level API completely from you (and simply/normal gui code doesnt contain ugly stuff like hooking into winapi HWNDS/dialog controls with MFC objects).
If you focus on nice code design then learn how a high level object oriented gui library works. If you are interested about whats going on under the hood then learn some low level winapi too, it definitely makes you a better programmer and you understand even higher level gui libraries especially if you learn how to implement a simple object oriented gui framework on top of winapi. In my opinion struggling through the book of Charlest Petzold isn't a waste of time.
MFC: forget about it and learn it only if it is necessary. BTW MFC is a very big library that isn't only about gui:
http://msdn.microsoft.com/en-us/library/ws8s10w4.aspx[
^]
MFC contains some useful high level classes (for example to do networking, ...) but using these makes your program very hard to port to other platforms. If we speak of the GUI part of MFC: it is much more near to the raw winapi then to a high level object oriented nice framework. In fact, MFC is quite outdated and MS maintains if because of the tremendous heritage code but it has not much to do with a modern gui framework and most of its class methods has the same name as the winapi functions and usually they do the same. Most of the MFC mechanisms build on the raw winapi mechanisms and MFC doesnt try to hide this (that is sometimes terrible in my opinion). MFC is only half (or maybe one-third) object oriented and the rest is basically straight winapi. If you still want to learn MFC (or if you have to learn MFC because you have to maintain some projects in MFC) then learning the book of Charles Petzold is a must, you have to know winapi in order to work with MFC because MFC gui is basically a set of classes that have the same methods as the gui part of the winapi. period. If you are OK with mediocre MFC knowledge then you can do it without learning winapi just by copy pasting examples from the net but in case of some tricky problems you will often need the help of others.
If you want to taste some nice gui frameworks then search for some gui example code written in the above mentioned gui frameworks and compare them with mfc examples. Check out the level of "object orientedness" and the connection with winapi or any other low level apis of these frameworks and MFC. You will see the difference especially if you have winapi experience.
The opensource and crossplatform sibling of MFC is wxWidgets, to me wxWidget solutions/mechanisms feel quite similar to those of MFC.
EDIT: Forgot to mention some important things:
Qt is quite good, the only thing I don't like in it is the superflous signal-slot mechanism and its code generator before compilation. But the lib itself is quite OK. Qt also has a lot of non-gui helper classes (like networking, xml, ...)
Another very nice alternative is C++ Builder. Its gui editor is like that of Delphi's or .Nets gui builder that is the best in my opinion. C++ Builder has the disadvantage that you have to stuck to its C++ compiler but if that is OK then this gui builder is probably the best RAD tool for C++ gui editing. If you are curious about how does it feel to develop gui-intensive app with the best gui development tools then definitely try either .Net, Delphi (pascal) or C++ Builder (that has exactly the same IDE as Delphi).