Использование AppWizard для создания приложения с главной диалоговой панелью

Приложения, созданные на основе MFC, как правило, не имеют главной функции приложения WinMain. Функция WinMain скрыта от программиста внутри методов класса CWinApp. Каждое приложение должно иметь один объект класса, наследованного от базового класса CWinApp. Используя AppWizard, построим приложение, базирующееся на диалоговой панели.

При создании проекта с помощью этого средства необходимо ответить на ряд вопросов, которые и определяют тип и возможности создаваемого приложения.

Сначала необходимо выбрать тип создаваемого приложения - “Single document” (приложение с однооконным интерфейсом), “Multiple document” (приложение с многооконным интерфейсом), “Dialog based” (приложение, основанное на диалоговой панели без главного окна).

После выбора типа приложения “Dialog based” появится следующая диалоговая панель, предназначенная для определения основных свойств приложения.

В этой панели можно будет указать, будет ли у создаваемого приложения информационная диалоговая панель, справочная подсистема, трехмерные органы управления, возможности использования технологии OLE и коммуникации с помощью протокола TCP/IP. Здесь же можно задать заголовок главной диалоговой панели.

В следующей диалоговой панели можно либо указать на необходимость включения комментариев к создаваемому шаблону приложения, либо отменить этот режим. Здесь же можно отметить желаемый способ подключения библиотеки MFC - в виде статически или динамически подключаемой библиотеки.

На последней диалоговой панели можно задать имена для создаваемых системой AppWizard классов приложения.

После определения всех свойств приложения MFC AppWizard создаст проект, который можно сразу же оттранслировать и получить приложение, полностью готовое к запуску. После запуска приложения на экране появляется диалоговая панель.

Обратите внимание, что AppWizard создал файлы Dialog.cpp и DialogDlg.cpp, а также файлы Dialog.h и DialogDlg.h. Файл Dialog.cpp содержит описание методов для класса CDialogApp.

Для класса CDialogApp описан конструктор, не имеющий параметров. Этот конструктор используется в момент запуска приложения для создания объекта класса CDilogApp.

Кроме конструктора, в классе CDialogApp переопределяется метод InitInstance базового класса CWinApp. Каждый раз при запуске очередной копии приложения вызывается этот метод. Это единственный метод главного класса, который обязательно должен быть переопределен. Средство MFC AppWizard реализует переопределяемый метод InitInstance для различного типа пользовательского интерфейса (однооконный, многооконный, основанный на диалоге) по-разному.

В данном случае в этом методе создается диалоговая панель, которая и будет выполнять роль пользовательского интерфейса приложения. Для этого сначала создается объект dlg класса CDialogDlg, который управляет диалоговой панелью. Затем адрес этого объекта присваивается элементу данных m_pMainWnd главного класса приложения.

После этого вызывается метод DoModal для объекта dlg класса CDlg. Он создает диалоговую панель и отображает ее на экране. Значение, выдаваемое методом DoModal, можно использовать для того, чтобы проанализировать результат работы пользователя с диалоговой панелью.

В файле dialog.cpp объявляется глобальный объект главного класса приложения. CDialogApp theApp;

Именно с создания этого объекта и начинается работа приложения.

Объект класса CWinApp (или класса, наследуемого от него) входит во все приложения, созданные с использованием MFC AppWizard, вне зависимости от пользовательского интерфейса этого приложения.

Таблица сообщений класса CDialogApp, созданная средством AppWizard, состоит из макрокоманд BEGIN_MESSAGE_MAP и END_MESSAGE_MAP. Между ними располагаются макрокоманды, определяющие сообщения, обрабатываемые данным классом.

Необработанные сообщения передаются на обработку базовому классу CWinApp, так как он указан во втором параметре макрокоманды BEGIN_MESSAGE_MAP.

#include "stdafx.h"

#include "Dialog.h"

#include "DialogDlg.h"

/////////////////////////////////////////////////////////////////////////////

// CDialogApp

BEGIN_MESSAGE_MAP(CDialogApp, CWinApp)

//{{AFX_MSG_MAP(CDialogApp)

//ClassWizard добавит сюда макросы для //обработки событий

//Не редактируйте эту часть

//}}AFX_MSG

END_MESSAGE_MAP()

////////////////////

// CDialogApp construction

CDialogApp::CDialogApp()

{

}

////////////////////

// Единственный объект CDialogApp

CDialogApp theApp;

/////////////////////////////////////////////////////////////////////////////

// CDialogApp инициализация

BOOL CDialogApp::InitInstance()

{

#ifdef _AFXDLL

Enable3dControls(); // Call this when //using MFC in a shared DLL

#else

Enable3dControlsStatic(); // Call this when //linking to MFC statically

#endif

CDialogDlg dlg;

m_pMainWnd = &dlg;

int nResponse = dlg.DoModal();

if (nResponse == IDOK)

{

//Добавить код, если OK

}

else if (nResponse == IDCANCEL)

{

//Добавить код, если CANCEL

}

//вернуть FALSE, т.к. диалог закрыт

return FALSE;

}

В исходный текст метода InitInstance включаются два оператора (if и else if), они определяют, какая кнопка диалоговой панели была нажата для ее закрытия. После этих операторов можно поместить собственный код, он будет вызываться при нажатии на соответствующую кнопку диалоговой панели.

Ресурсы приложения.

Большую часть пользовательскошо интерфейса любого пртложения составляют ресурсы - меню, пиктограммы, иконки, курсоры, диалоговые панели. Создавая приложение, AppWizard создает для него базовый набор ресурсов, которые можно редактировать, а также создаватьновые. Все ресурсы приложения хранятся в специальном каталоге - RES. Но для просмотра, создания и изменения ресурсов достаточно просто можно воспользоваться средствами, предоставляемыми Developer Studio.Для этого откройте страницу ResourceView в ProjectWorkspace. Посмотрите, какие ресурсы созданы для приложения AppWizard. Откройте диалог с идентификатором IDD_DIALOG_DIALOG. Это и есть главная диалоговая панель приложения. Второй диалог с идентификатором IDD_ABOUTBOX - панель ждя отображения на экране, когла польхователь выберет из меню команду About. Вы сможете изменить эти панели.

Пиктограмма, указанная в ресурсах с идентификаторм IDR_MAINFRAME, содержится в файле Dialog.ico в папке RES. Вы также можете изменить эту пиктограмму.

Наши рекомендации