MFC is, in my eyes, the CSB of the entire C++ language.
Damnit, stupid power outage, now I have to start over.
Joe, that's patently retarded. That's like saying the Java class library, or java.lang.* and javax.swing.* are the CSB of the Java language; or the System and System.Windows.Forms namespaces are the CSB of the .NET Framework languages; or that wxWidgets is the CSB of cross-platform C++.
Most people's problems with MFC stems from its bloat. If you're using only the Windows part of it (objects deriving from CWnd), you can't specify a way to exclude CSocket from the library, or vice versa.
Plus, MFC is an extremely effective teaching tool for learning the Windows API. They don't try to hide the fact that it's a wrapper for the Win32 API. For example, the CWnd class defines the method CWnd::SetWindowPos(const CWnd*, int, int, int, int, UINT), which wraps the Win32 API function SetWindowPos(HWND, HWND, int, int, int, int, UINT). All the CWnd function does is provide the window handle to the first parameter of the API, and translates the 2nd parameter (a pointer to another CWnd) into a window handle.
Languages and language libraries exist so the developer doesn't have to constantly reinvent the wheel. If MFC is the CSB of C++, next time, create your own windowing implementation for Java (don't use Swing).