
- •Відповіді на контрольні питання до контрольної роботи з ооп Короткий конспект
- •Структура програм для windows.
- •Типи даних win32.
- •Карти повідомлень.
- •Огляд класів вікон бібліотеки mfc. Самий базовий клас бібліотека mfc (клас cobject)
- •Основні складові програм на базі бібліотеки класів mfc.
- •Мінімальна програма для windows.
- •Архітектура програми документ – облік.
- •Обмен данными диалога
- •Модальні та немодальні діалогові вікна.
- •Библиотека mfc
- •Каркас приложения
- •Проект приложения
- •Типы мастеров проектов
- •Имена, используемые в mfc
- •Метод oninitdialog
- •Класс диалоговой панели и его реализация
- •Обмен данными диалога
- •Главный класс приложения
- •Управління пам’яттю в mfc
Основні складові програм на базі бібліотеки класів mfc.
У всех Windows-приложений фиксированная структура, определяемая функцией WinMain. Структура приложения, построенного из объектов классов библиотеки MFC, является еще более определенной.
Приложение состоит из объекта theApp, функции WinMain, и некоторого количества других объектов. Сердцевина приложения - объект theApp - отвечает за создание всех остальных объектов и обработку очереди сообщений. Объект theApp является глобальным и создается еще до начала работы функции WinMain. Работа функции WinMain заключается в последовательном вызове двух методов объекта theApp: InitInstance и Run. В терминах сообщений можно сказать, WinMain посылает объекту theApp сообщение InitInstance, которое приводит в действие метод InitInstance.
Получив сообщение InitInstance, theApp создает внутренние объекты приложения. Процесс создания выглядит как последовательное порождение одних объектов другими. Набор объектов, порождаемых в начале этой цепочки, определен структурой MFC практически однозначно - это главная рамка, шаблон, документ, облик. Их роли в работе приложения будут обсуждаться позже.
Следующее сообщение, получаемое theApp, - Run - приводит в действие метод Run. Оно как бы говорит объекту: "Начинай работу, начинай процесс обработки сообщений из внешнего мира". Объект theApp циклически выбирает сообщения из очереди и инициирует обработку сообщений объектами приложения.
Некоторые объекты имеют графический образ на экране, с которым может взаимодействовать пользователь. Эти интерфейсные объекты обычно связаны с Windows-окном. Среди них особенно важны главная рамка и облик. Именно им объект прежде всего распределяет сообщения из очереди через механизм Windows-окон и функцию Dispatch.
Когда пользователь выбирает команду меню окна главной рамки, то возникают командные сообщения. Они отправляются сначала объектом theApp объекту главная рамка, а затем обходят по специальному маршруту целый ряд объектов, среди которых первыми являются документ и облик, информируя их о пришедшей от пользователя команде.
При работе приложения возникают и обычные вызовы одними объектами методов других объектов. В объектно-ориентированной терминологии такие вызовы могут называться сообщениями. В Visual C++ некоторым методам приписан именно этот статус (например, методу OnDraw).
Важное значение имеют также объекты документ, облик и главная рамка. Здесь отметим только, что документ содержит данные приложения, облик организует представление этих данных на экране, а окно главной рамки - это окно, внутри которого размещены все остальные окна приложения.
Мінімальна програма для windows.
Приклад
Включить описание классов MFC
#include <afxwin.h>
Объявить класс производный от CWinApp
class CMyApp : public CWinApp
.......
Объявить переменную этого класса
CMyApp theApp;
Объявить класс производный от CFrameWnd
class CMainWnd : public CFrameWnd
.........
В конструкторе класса производного от CFrameWnd вызвать функцию Create и выбрать параметры в ней на свой вкус.
Create(NULL,"Step1",WS_OVERLAPPEDWINDOW,rectDefault,NULL,NULL);
Переопределить функцию InitInstance класса производного от CWinApp
С функции InitInstance создать объект производный от CFrameWnd и присвоить указателю m_pMainWnd адрес этого объекта.
m_pMainWnd=new CMainWnd();
Проверить указатель на корректность
ASSERT(m_pMainWnd);
Вызвать функции класса производного от CFrameWnd для прорисовки на экране
m_pMainWnd ->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
Закончить выполнение функции, убедив MFC, что все нормально
return TRUE;
ТАБЛИЦА СООБЩЕНИЙ ДИАЛОГОВОЙ ПАНЕЛИ
Класс диалоговой панели должен обрабатывать сообщения от своих органов управления, поэтому он должен иметь таблицу сообщений. В заголовке таблицы сообщений указывается имя класса CDlg и имя базового класса CDialog. Таблица сообщений класса CDlg содержит только одну строку, в которой обрабатывается сообщение с кодом извещения ON_BN_CLICKED от кнопки "Clear". Когда пользователь нажимает кнопку, вырабатывается данное сообщение и вызывается его обработчик - метод OnClickedClear, определенный в классе CDlg.
Строки таблицы сообщений расположены в блоке AFX_MSG_MAP, поэтому для управления ими используется ClassWizard.
Две другие кнопки панели - "Ok" и "Cancel" - не представлены в таблице сообщений, но в приложении определены методы OnOK и OnCancel, которые вызываются при нажатии на них. Оказывается, для диалоговых панелей определены две стандартные кнопки - "Ok" и "Cancel", которым присвоены специальные идентификаторы IDOK и IDCANCEL.
Базовый класс CDialog, так же как и класс CMyDialog, содержит таблицу сообщений. Среди прочих сообщений в этой таблице определены командные сообщения с идентификаторами IDOK и IDCANCEL. Для обработки этих командных сообщений определены виртуальные методы OnOK и OnCancel. Поэтому, когда диалоговая панель содержит кнопки с идентификаторами IDOK и IDCANCEL, как правило, нет необходимости создавать для них обработчики.
Так как в таблице сообщений класса CDlg отсутствует макрокоманды для обработки сообщений от кнопок "Ok" и "Cancel", они передаются для обработки базовому классу CDialog. Здесь они обрабатываются виртуальными методами OnOK и OnCancel.
Метод OnOK, определенный в классе CDialog, копирует данные из полей диалоговой панели в связанные с ними переменные. Для этого вызывается метод UpdateData с параметром TRUE. Затем выполняется вызов метода EndDialog, который закрывает диалоговую панель и возвращает значение IDOK. Метод DoModal, который используется для создания диалоговой панели и вызывается в классе родительского окна, прекращает работу и возвращает IDOK.
Метод OnCancel, определенный в классе CDialog, еще проще, чем OnOK. Он только закрывает диалоговую панель и возвращает значение IDCANCEL. Копирование данных не происходит, так как пользователь отменил изменения, нажав кнопку "Cancel".
Так как методы OnOK и OnCancel определены в классе CDialog как виртуальные, то можно переопределить их в классе CDlg. В этом случае управление получат переопределенные методы, а не методы класса CDialog. Методы класса можно вызвать, явно указав класс CDialog.