Класс родительского объекта

Для обеспечения работы с немодальным диалогом сначала необходимо в классе приложения, в котором вызывается диалог (например, в классе окна приложения), объявить элемент Dlg класса CDlg. Родительский объект в методах своего класса может вызывать для диалоговой панели методы ее класса через объект Dlg, что обеспечивает связь родительского объекта и порождаемого им немодального диалога.

В момент создания объекта класса CDlg диалоговая панель как окно еще не создана и не появляется на экране. Для этого надо вызвать метод Create класса CDlg. Если диалоговая панель имеет стиль WS_VISIBLE, то она сразу появляется на экране. В противном случае для этого надо вызвать метод ShowWindow. Итак, в методе, который вызывает немодальный диалог (например, в методе-обработчике какого-либо сообщения для окна приложения), следует проверить, не отображается ли уже эта диалоговая панель, а затем создать ее методом Create класса CDlg:

if(Dlg.GetSafeHwnd()==NULL) Dlg.Create(this);

Чтобы закрыть немодальную диалоговую панель, можно воспользоваться методом DestroyWindow:

if(Dlg.GetSafeHwnd()!=NULL) Dlg.DestroyWindow();

Метод DestroyWindow определен в классе CWnd, следовательно, его можно вызывать для объектов класса диалоговой панели.


Глава 5. Приложение, основанное на диалоге (использование AppWizard)

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

Создание шаблона приложения

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

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

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

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

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

Проект dlg включает в себя ряд файлов, созданных системой AppWizard (см. Приложение 1). Рассмотрим назначения этих файлов:

  • dlg.h - в этом файле перечислены другие включаемые файлы и описан главный класс приложения CDlgApp.
  • dlg.cpp - основной файл приложения. В нем определены методы основного класса приложения CDlgApp.
  • dlgDlg.h - содержит описание класса главной диалоговой панели, который называется CDlgDlg. Класс CDlgDlg наследуется от базового класса CDialog, определенного в библиотеке классов MFC.
  • dlgDlg.cpp -файл содержит определение методов класса CDlgDlg.
  • dlg.rc - файл ресурсов. В этом файле описаны все ресурсы приложения. Сами ресурсы приложения могут быть записаны в каталоге Res, расположенном в главном каталоге проекта.
  • resource.h - файл содержит определения идентификаторов ресурсов приложения.
  • res\dlg.ico - пиктограмма приложения.
  • res\dlg.rc2 - в этом файле определены ресурсы, которые нельзя редактировать с помощью редактора ресурсов среды Visual C++.
  • StdAfx.h, StdAfx.cpp - использование этих файлов позволяет ускорить процесс повторного построения проекта.
  • readme.txt - текстовый файл, содержащий описание проекта. В нем кратко рассмотрен каждый файл, входящий в проект, перечислены классы приложения, а также представлена другая информация.

Созданный при помощи AppWizard проект можно взять за основу, изменить его в соответствии с потребностями и задачами приложения. В диалоговую панель можно добавить новые органы управления, создать другие ресурсы. Изменять подготовленный проект можно с использованием средства ClassWizard (для добавления новых классов, новых методов и переменных для существующих классов, для создания методов-обработчиков сообщений и т.д.) и редактора ресурсов.

Главный класс приложения

Главный класс приложения CDlgApp определен в файле dlg.h и реализован в файле dlg.cpp.

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

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

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

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

Главный объект приложения

В файле dlg.cpp объявляется глобальный объект главного класса приложения. Именно с создания этого объекта и начинается работа приложения.

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

Таблица сообщений класса

Таблица сообщений класса CDlgApp, созданная средством AppWizard, состоит из макрокоманд BEGIN_MESSAGE_MAP и END_MESSAGE_MAP. Между ними располагаются макрокоманды, определяющие сообщения, обрабатываемые данным классом. Изначально в таблице определено только одно командное сообщение, имеющее идентификатор ID_HELP. Для его обработки вызывается метод OnHelp базового класса.

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: