http://tikitak.narod.ru ---- Главная страница сайта
Шаг 71 - Что формирует MFC AppWizard
Сегодня было шикарное северное сияние. Прям как Тверская ночью :-)
Описание
AppWizard формирует файлы и классы в зависимости от типа формируемого приложения. Конечно включение поддержки баз данных и составных документов влияет на формируемые файлы. Мы рассмотрим простые случаи.
SDI
При генерации приложения данного типа формируются следующие классы в виде заголовочного файла *.H и файла реализации *.CPP. Будет созданно 5 классов.
* - имя проекта
CAboutDlg - класс диалога о программе (About)
C*SDIApp - класс приложения ( включает порожденый класс от CWinApp внутри которого WinMain)
C*SDIDoc - класс документа
C*SDIView - класс просмотра
CMainFrame - класс рамки окна
MDI
Обратите внимание, что различия очень маленькие SDI меняется на MDI. Кроме того различия очень маленькие есть в коде. Например, для формирования шаблона в SDI используется CSingleDocTemplate, а в MDI - MultiDocTemplate
* - имя проекта
CAboutDlg - класс диалога о программе (About)
C*MDIApp - класс приложения ( включает порожденый класс от CWinApp внутри которого WinMain)
C*MDIDoc - класс документа
C*MDIView - класс просмотра
CMainFrame - класс рамки окна
Dialog Based
Формируется 3 класса.
* - имя проекта
CAboutDlg - класс диалога о программе (About)
C*DialogApp - класс приложения ( включает порожденый класс от CWinApp внутри которого WinMain)
C*DialogDlg - класс главного диалогового окна.
Некторые дополнения
Приложения созданные AppWizard уже умеют работать с командной строкой. Это реализуется функцией ProcessShellCommand. Ниже перечисляются поддерживаемые параметры.
нет параметров - запускает приложения и открывает пустой файл
имя файла - запускает и открывает данный файл
/p имя файла - запускает и печатает файл на принтере по умолчанию
/pt имя файла Принтер Драйвер Порт - запускает и печатает на специфичном принтере
/dde - запускает и ждет команд DDE
/Automation - запускает в качестве сервера OLE
/Embedding - запускает в режиме внедренного обьекта OLE
Как видите автоматически у Вас формируется большое количество возможностей, например, перетащить файл на принтер и бросить, если зарегистрировано расширение и многое другое.
Немного о коде
В начале кода Вы можете увидеть, что-то типа
#if !defined(AFX_CHILDFRM_H__58CE2B44_BDCB_11D3_A392_000001260696__INCLUDED_)
#define AFX_CHILDFRM_H__58CE2B44_BDCB_11D3_A392_000001260696__INCLUDED_
В этой надписи нет нечего страшного :-) это аналог примерно вот чего -
#if !defined(My_H)
#define My_H
И создано всё это для того, чтобы исключить повторные включения в такой большой код это просто для гарантии, тем более что Вам это самим не вносить. Я напишу про это в подробностях для лучшего понимания.
В коде Вы можете увидеть конструкции типа
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CChildFrame)
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
//}}AFX_VIRTUAL
Не меняйте нечего внутри AFX_*, так как эту конструкцию использует ClassWizard для добавления и удаления функций.
Предыдущий Шаг | Следующий Шаг | Оглавление By Artem.
Используются технологии uCoz
|