Just a note those "vacancies" include dilapidated buildings and housing that is between leases (literally all the housing on craigslist is included in that number).
Vacancies in most major cities is near-zero. As a market-rate renter, when someone says "we have so much excess", I have no idea what you're talking about.
This assumes production of food is the bottleneck rather than distribution. If distribution is actually the bottleneck, overstocked food is not a measure of excess in society.
This makes me realize that one of my formative childhood experiences was seeing the Crayola 64 crayon pack and thinking "huh, I guess there is NO limit."
The main loop of any GUI application is an event loop. You can't do that without using a platform API, and the platform API happens to be GetMessage() / TranslateMessage() / DispatchMessage(). There is nothing Win32 specific that somehow gives you less ownership of the main loop than you would have otherwise. If anything, it gives you more customization than most other platforms / frameworks by having three separate functions between which you can manipulate events.
At best, what the article is trying to say is "This is a GUI application, so we need to handle user input and paint request events etc in the main loop. Here is how to set up such a main loop in Win32:"
Win32 messages are higher-level than what you get out of select() and such, but that only serves to make it easier to customize things at the appropriate level of abstraction and with sufficient high-level information.