Okay, you know... I don't fully understand the hate for Win32 specifically. There, I said it. Maybe it's that I've been doing Win32 for approximately as long as there's been a Win32, but once you've bothered to learn it it's really no less straightforward than any other API. Writing a dialog proc directly, say, isn't really all that different even in the amount of work required than creating a dialog class with overridden message handlers.
A lot of what I'm hearing in this thread is "I've never done much Win32 but what I've seen looks hard, and therefore it's bad," and I'm having trouble crediting that criticism generally as a problem with the API. I'm not saying it's the best possible option, particularly if you're the sort who has grown up to expect a pretty object model for everything, but it certainly gets the job done.
No matter how you wrap it up, Win32 (or -64) is what Windows is doing under the hood, and historically the wrapped-up gizmos that are supposed to make the job easier by hiding that from me (VB, Delphi, OWL, MFC, ATL, .NET and whatever somebody comes up with next) can end up getting in my way in ways the core API doesn't for some tasks. Usually the best reasons to use one of those frameworks tend to be either the need to use some other library that's already coded to work with one of them, or that you're doing something so routine that you won't be pushing the boundaries of any object model (the equivalent of the "TextEdit clone" HiRez alluded to).
I'm sure this makes me just stupid and wrong, and plenty of people will gladly step up to tell me so, but there it is.