Общая информация про MFC. Иерархия классов MFC. Место MFC в среде разработчика Visual C++
Иерархия основных классов MFC. CObject (обеспечивает базовые операции ввода/вывода) →CGDIObject (поддержка графических объектов); CDC (класс, обеспечивающий связь с устройствами); CExeption (обработка исключительных ситуаций в MFC); CFile (базовый класс для обработки файлов); CMenu (поддержка обьектов меню); CCmdTarget (базовый для обработки сообщения)1)→CWnd (базовый класс для окон); СFrameWnd; 2)→CWinThread;CwinApp;
Структура простой MFC программы. Программа на MFC содержит, по крайней мере, 2 класса. И эти классы порождаются от CWnd и CWinThread. Для реализации простой программы сделаем следующую последовательность шагов: 1) Создать класс приложений, порожденный от CWinApp. 2) Создать класс окна, порожденный от CFrameWnd. 3) Для класса приложения объявить функцию InitInstance(). 4) В конструкторе класса окна вызвать функцию Create для создания окна. 5) Объявить глобальный объект приложения. 6) Создать карту сообщения. 7) Подключить заголовочные файлы и определиться с типом объектов.
//App.h
class CApp: public CWinApp
{public: BOOL InitInstance ();};
Class CMainWin:public CFrameWnd
{public: CMainWin (); DECLARE_MESSAGE_MAP ()
};
//App.cpp
#include <afxwin.h>
#include “App.h”
BOOL CApp::InitInstance ()
{m_pMainWnd=newCMainWin;m_pMainWnd→ShouWindow (m_nCmdShow); m_pMainWnd→UpdateWindow (); return TRUE;}
CMainWin::CMainWin ()
{Create (NULL, “Первая MFC-программа”);}
CApp App;
BEGIN_MESSAGE_MAP (CMainWin, CFrameWnd)
END_MESSAGE_MAP ()
MFC - (Microsoft Foundation Class Library) базовая библиотека классов; Иерархия классов MFC. Библиотека MFC содержит большую иерархию классов, написанных на C++. В ее вершине находится класс CObject, который содержит различные функции, используемые во время выполнения программы и предназначенные, в частности, для предоставления информации о текущем типе во время выполнения, для диагностики, и для сериализации. Информация о типе времени выполнения. Если указатель или ссылка ссылается на объект, производный от класса CObject, то в этом случае предусмотрен механизм определения реального типа объекта с помощью макроса RUNTIME _CLASS(). Хотя в C++ имеется механизм RTTI, механизм, реализованный в MFC, намного более эффективен по производительности.
Диагностика. Каждый класс, производный от CObject, может по запросу проверить свое внутреннее состояние и выдать диагностическую информацию. Это интенсивно используется в MFC при отладке.
Сериализации. Сериализация - это механизм, позволяющий преобразовать текущее состояние объекта в последовательный поток байт, который обычно затем записывается на диск, и восстановить состояние объекта из последовательного потока, обычно при чтении с диска. Это позволяет сохранять текущее состояние приложения на диске, и восстанавливать его при последующем запуске.
Основные классы. Некоторые классы порождаются непосредственно от CObject. Наиболее широко используемыми среди них являются CCmdTarget, CFile, CDC, CGDIObject и CMenu. Класс CCmdTarget предназначен для обработки сообщений. Класс CFile предназначен для работы с файлами. Класс CDC обеспечивает поддержку контекстов устройств. Об контекстах устройств мы будем говорить несколько позднее. В этот класс включены практически все функции графики GDI. CGDIObject является базовым классом для различных DGI-объектов, таких как перья, кисти, шрифты и другие. Класс CMenu предназначен для манипуляций с меню. От класса CCmdTarget порождается очень важный класс CWnd. ............