Рассмотрим структуру библиотеки MFC. В основе всей иерархии лежит класс CObject, от которого порождаются все остальные объекты MFC. Класс CObject умеет делать не так уж много, в основном он предоставляет производным классам четыре полезные функции:
1) сериализацию – возможность сохранить объект на постоянном носителе и позднее извлечь его оттуда;
2) runtime-информацию класса – возможность узнать во время выполнения программы имя класса для конкретного объекта и его положение в иерархии объектов. VisualC++ версий 4.0 и выше поддерживаются «родные» для языка C++ конструкции RTTI (runtime type information), поэтому эта функциональность присуща всем классам. Возможно, в последующих версиях библиотека MFC изменится, и в ней будет использоваться поддержка RTTI на уровне компилятора;
3) диагностику – организация вывода отладочных сообщений;
4) совместимость – возможность работы с классами-коллекциями MFC.
Классы в библиотеке MFC делятся на шесть основных категорий:
1) общие классы (строки, файлы, исключения, дата/время и прямоугольники);
2) классы визуальных объектов (окна, контексты устройств, объекты GDI и диалоговые окна);
3) классы архитектуры приложений (приложения, документы, виды);
4) классы-коллекции (списки и массивы);
5) классы COM и ActiveX;
6) классы баз данных, организующие доступ к данным через ODBC и, начиная с MFC версий 4.0 и выше, через DAO (Data Access Objects – интерфейс Automation для работы с ядром базы данных Microsoft Jet и другими источниками данных).
Надо учесть, что деление на категории является отчасти условным – один и тот же класс может принадлежать сразу нескольким категориям. Например, класс CCmdTarget включается в категории как общих классов, так и классов коллекций.