In my opinion the biggest obstacles for MFC were: * a pretty bad C++ compiler (the first good MS C++ compiler was the one with Visual Studio 2003 as much as i remember) * that the core group were "old school" C guys that either couldn't design a better object oriented system or thought that it would be to hard for the "normal" developers
The macros in the Windows 3.1 SDK were the strict header mode and message crackers.
https://support.microsoft.com/en-us/kb/83456
It made my life sane every time I had to use C instead of C++, and yet very few people knew about them.
Petzold never mentioned them in his books, I discovered them by chance in another book.
Nice to know that the Afx story might have not been a rumour, since other people heard the same.
My first Visual C++ was v5.0, by then it was already clear that Borland was on they way out as first choice. Sadly.
However in MFC's defense I think one can blame it on Microsoft's study group. I read somewhere that the Afx prefix came from their original design. A framework close in spirit to OWL, but their study group deemed it to high level.
So they made it a thin wrapper over Win16 instead.
On my case, the few cases I was forced outside OWL and MFC into pure C land, I use a set of macros from the Windows SDK.
They weren't properly documented, but with the Windows 3.1 SDK Microsoft created a kind of "type safe" handles and message dispatch macros, which relieved the WndProc pain.
Nevertheless, Xlib was even worse.