Шаг 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 для добавления и удаления функций.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.