Вы находитесь на странице: 1из 7

Visual C++ Лекция 2 1

ЛЕКЦИЯ 2
СОЗДАНИЕ ДИАЛОГОВОГО ПРИЛОЖЕНИЯ _____________________________________________ 1
AppVizard - Step 1_______________________________________________________________________ 1
AppVizard - Step 2_______________________________________________________________________ 2
AppVizard - Step 3_______________________________________________________________________ 2
AppVizard - Step 4_______________________________________________________________________ 2
СОЗДАНИЕ ДИАЛОГОВОГО ОКНА ______________________________________________________ 3
Формирование ресурсов диалогового окна __________________________________________________ 3
Выбор языка интерфейса диалогового окна _________________________________________________ 4
Задание идентификаторов диалогового окна и элементов управления ___________________________ 4
Создание класса диалогового окна ________________________________________________________ 4
Свойства диалогового окна_______________________________________________________________ 4
Немодальные диалоговые окна ___________________________________________________________ 6
Вывод диалогового окна на экран _________________________________________________________ 6

СОЗДАНИЕ ДИАЛОГОВОГО ПРИЛОЖЕНИЯ


Приложение этого типа не имеет никакого меню, кроме системного, и оно не может открывать или
сохранять файлы. Это оптимальный вариант для относительно простых утилит типа Character Map, что
входит в состав базового комплекта Windows. Процесс построения такого приложения с помощью
AppWizard включает в себя несколько шагов, при выполнении которых нужно установить параметры
приложения. При этом нужно иметь ввиду, что после завершения последнего шага изменить параметры
приложения практически невозможно и если вы ошиблись при установке параметров приложения, то при-
дется создавать приложение заново. Для создания диалогового приложения необходимо выполнить сле-
дующие действия:
выберите команду File
New;
в окне New откройте вклад-
ку Project и выберите MFS
AppVizard(exe);
в поле Project Name вве-
дите имя проекта, используя
латиницу (имя проекта
должно быть кратким и зна-
чимым, поскольку будет
многократно использовано);
в поле Location введите
путь папки Рабочий стол на
локальном компьютере. При
разработке проекта автома-
тически создаётся папка
Debug, размер которой мо-
жет значительно превышать
разрешенный размер вашей персональной папки.
После завершения работы с проектом удалите папку
Debug, создайте архив проекта и переместите его в
вашу персональную папку;
щелкните на кнопке Ок, для того, чтобы перейти к
первому этапу
AppVizard - Step 1
В окне MFS AppVizard-Step 1 выберите переклю-
чатель Dialog based. и нажмите кнопку Next, чтобы пе-
рейти к следующему этапу. Выбор переключателя Single
document позволяет создавать приложение, которое может
работать с одним документом. Выбор переключателя
Multiple document позволяет создавать приложение, ко-
торое может работать с несколькими документами
одновременно.

Выжол Ю.А.
Visual C++ Лекция 2 2
Щелкните на кнопке Next для того, чтобы перейти ко второму этапу.
AppVizard - Step 2
Если вы решили включить в системное меню пункт About, установите флажок About box.
Для того чтобы AppWizard подготовил все необходимое для включения в приложение справки,
нужно установить флажок Context-sensitive Help (контекстная справка).
Третий флажок в этом окне — 3D controls
(объемный дизайн элементов управления) рекомендуется
устанавливать для большинства приложений, работа
которых планируется в операционных средах Windows 95 и
Windows NT.
Если вы хотите, чтобы создаваемое приложение
могло отдавать управление другому приложению через
механизм ActiveX Automation, установите флажок
Automation.
Если планируется использовать в приложении
элементы управления ActiveX, установите флажок
ActiveX Controls.
Если планируется, что приложение будет иметь доступ
к Internet через гнездо, установите флажок Windows
Sockets. (Простое диалоговое приложение не может
использовать почтовые средства MAPI по той простой причине, что оно не оперирует с документами.)
Щелкните на кнопке Next для того, чтобы перейти к третьему этапу,
AppVizard - Step 3
На третьем этапе нужно ответить на два вопроса.:
Would you like to generate source file component? (Не будет
ли вам угодно включить в текст программы комментарии?).
Редко кто отказывается, тем более, что комментарии гене-
рируются автоматически.
Ответ на второй вопрос не так очевиден. Желаете ли
вы, чтобы библиотека MFC была разделяемой динамически
связываемой библиотекой (shared DDL) или статически при-
компонованной (statically linked library)?
Использование динамически связываемой библиотеки
(DLL – Dynamic-Link Library) сокращает объем программы,
но несколько усложняет установку приложения. Если вы
просто перенесёте на другой выполняемый файл такой про-
граммы, то, скорее всего, приложение работать не будет,
поскольку оно нуждается в соответствующих DLL-файлах.
Если ваши заказчики используют MFC DLL или не против установки DLL-файлов на своём компьютере, то
выберите опцию As a shared DLL. Более короткий EXE-файл – это всегда хорошо.
Если ваши потенциальные пользователь не очень искушены, то лучше использовать опцию As a
statically linked library. В результате получится более длинный EXE-файл, но вы будете избавлены от
многих забот, связанных с сопровождением продукта. Следует отметить, что разработка программы инстал-
ляции, которая эту проблему решает, не очень сложная задача.
AppVizard - Step 4
На этом этапе можно уточнить имена, выбранные
AppWizard для файлов и классов. Редко кому удается
придумать более удачные, поскольку тех, кто будет рабо-
тать с вашей программой, может несколько смутить отсут-
ствие видимой связи между именем какого-либо файла и
именем соответствующего класса, или наоборот. Если вам
покажется, что имя проекта было выбрано не очень удач-
но, вернитесь обратно в окно New Project Workspace
(рабочее пространство нового проекта) с помощью кнопки
Back и измените имя проекта, щелкните на Create, а за-
тем снова прощелкайте несколько раз Next, чтобы вер-
нуться в окно последнего этапа творения.

Выжол Ю.А.
Visual C++ Лекция 2 3
После завершения работы щелкните на кнопке Finish, и AppWizard представит вам итоговую
спецификацию заказа всех классов и файлов будущего приложения.

СОЗДАНИЕ ДИАЛОГОВОГО ОКНА


Для каждого диалогового окна в приложении есть две вещи, которые нужно разработать, — ресурсы
окна и класс окна. Ресурсы окна используются программой для того, чтобы вывести на экран его изображе-
ние и изображения элементов управления, которые входят в него. В класс окна включены его параметры и
функции-члены, ответственные за вывод окна на экран. Они работают совместно для достижения общей
цели — обеспечить максимально эффективное взаимодействие пользователя и программы.
Ресурсы диалогового окна создаются посредством редактора ресурсов, с помощью которого вы
можете включать в состав окна необходимые элементы управления и размещать их в пространстве окна
желаемым образом. Помощь в создании класса окна вам окажет ClassWizard. Как правило, класс кон-
кретного диалогового окна в проекте является производным от базового класса CDialog, имеющегося в
составе MFC (Microsoft foundation Classes). ClassWizard также поможет связать ресурсы окна с классом.
Обычно каждый элемент управления, включенный в состав ресурсов окна, имеет в классе окна соответст-
вующий член-переменную. Для того чтобы вывести диалоговое окно на экран, нужно вызвать функцию-
член его класса. Для того чтобы установить значения по умолчанию для элементов управления перед вы-
водом окна на экран или считать состояние элементов управления после завершения работы пользовате-
ля, нужно обращаться в членам-переменным класса.
Формирование ресурсов диалогового окна
Первый шаг процесса организации диалогового окна в приложении, использующем библиотеку
MFC, — формирование ресурса окна, который служит своего рода шаблоном для Windows. Когда
Windows видит ресурс окна в программе, она использует команды из этого ресурса для конструиро-
вания работающего окна.
Для того чтобы приступить к формированию ресурсов, необходимо сначала открыть приложе-
ние. Выберите Insert ► Resource. Появится диалоговое окно Insert Resource. Сделайте двойной
щелчок на элементе Dialog в окне Resource Туре. Этим вы вызываете редактор диалогового окна,
который выводит на экран заготовку окна.

Вызовите на экран диалоговое окно Dialog Properties для вновь созданного диалогового окна с
помощью команды View ► Properties или команды Properties в контекстном меню диалогового окна.

В поле Caption (Надпись) введите строку, которая будет отображена в заголовке диалогового окна.
Вам придется довольно часто обращаться к окну Dialog Properties по ходу разработки ресурсов диало-
гового окна, так что "закрепите" его на экране, щелкнув на пиктограмме с изображением канцелярской
кнопки в его левом верхнем углу

Для получения справки о назначении свойств диалогового окна, отображённых на текущей

Выжол Ю.А.
Visual C++ Лекция 2 4
вкладке, щелкнув на пиктограмме с изображением вопросительного знака в его левом верхнем углу
Выбор языка интерфейса диалогового окна
Если вы хотите использовать кириллицу для надписей и кнопок, то необходимо установить русский
язык для интерфейса диалогового окна:
в окне Workspase (рабочее пространство) вы-
берите вкладку Resource View (обзор ресур-
сов)
выделите имя диалогового окна
в контекстном меню диалогового окна выберите
команду Properties (свойства)
в диалоговом окне Dialog Properties в списке
Language выберите Russian.
Задание идентификаторов диалогового окна и элементов управления
Поскольку каждое диалоговое окно в приложении является уникальным объектом, (исключение со-
ставляют только стандартные окна) разработчику практически всегда нужно присвоить окнам и элементам
управления, входящим в их состав, идентификаторы по собственному выбору. Конечно, можно согласить-
ся и с теми идентификаторами, которые предлагает редактор диалоговых окон по умолчанию. Однако эти
имена тривиальны (как правило, нечто вроде IDC_EDIT1) и значительно лучше заменить их на другие,
связанные с назначением и функциями окна или элемента. Но в любом случае рекомендуется соблюдать
соглашение о префиксах — идентификаторы диалоговых окон имеют префикс IDD_, а идентификаторы
элементов управления – IDC_. Рекомендуется задавать идентификаторы диалоговых окон и элементов
управления с использованием прописных букв. Заменить идентификатор можно с помощью диалогового
окна Properties.
Создание класса диалогового окна
Когда формирование ресурсов диалогового окна будет завершено, вызовите на экран ClassWizard
Для этого нужно выбрать View ► ClassWizard. Если диалоговое окно создано, но класс для него не оп-
ределён, ClassWizard предложит свои услуги и откроет диалоговое окно Adding a Class (добавление
класса). Не трогайте переключатель Create a new class (создать новый класс), щёлкните на кнопке ОК.
Появится новое диалоговое окно New Class (Новый класс).

В поле; Name (Имя) введите имя нового класса, например COptions, и щелкните на кнопке ОК.
После этого ClassWizard создаст новый класс, подготовит файл текста программы COptions.срр и
файл заголовка Options.h и включит их в состав проекта.
Свойства диалогового окна
Свойства диалогового окна, как и других объектов, можно установить в окне Dialog Proerties, в
котором эти свойства сгруппированы по назначению и расположены на нескольких вкладках.
ID – идентификатор диалогового окна. Уникальное имя в проекте. Строковое выражение без пробелов и
знаков препинания. Рекомендуется использовать в имени диалогового окна префикс IDD_
Caption – надпись диалогового окна, отображается в заголовке окна. Строковое выражение.

Выжол Ю.А.
Visual C++ Лекция 2 5
Font name – имя шрифта, который будет использо-
ваться во всех элементах управления. Всегда
используется обычное начертание шрифта.
Шрифт по умолчанию – MS Sans Serif.
Font size – размер шрифта, который будет исполь-
зоваться во всех элементах управления. Раз-
мер шрифта по умолчанию – 8 пунктов.
Menu – идентификатор ресурса меню, используемо-
го в диалоговом окне
X Pos, Y Pos – координаты верхнего левого угла диалогового окна. Целое число.
Menu – идентификатор ресурса меню, используемого в диалоговом окне
Style – стиль окна может иметь одно из следующих
значений:
Overlapped – перекрывающее окно. Всегда
окно верхнего уровня и с заголовком и
границей.
Popup – всплывающее окно (по умолчанию).
Child – дочернее окно.
Border – стиль границы может иметь одно из сле-
дующих значений:
None – граница и полоса заголовка отсутствуют.
Thin – тонкая граница.
Resizing – изменяемая граница.
Dialog Frame - граница окна диалога (по умолчанию).
Titlebar – отображает строку заголовка окна (по умолчанию - True).
System menu – отображает системное меню и кнопки управления окном (по умолчанию - True).
Minimize box – определяет доступ к кнопке свёртывания окна (по умолчанию - False).
Maximize box – определяет доступ к кнопке развёртывания окна (по умолчанию - False).
Clip siblings – используется при создании родительских и дочерних форм
Clip children – используется при создании родительских и дочерних форм
Horizontal scroll – отображает горизонтальную полосу прокрутки (по умолчанию - False).
Vertical scroll – отображает вертикальную полосу прокрутки (по умолчанию - False).
System modal – определяет модальность окна.
Запрещает переключение к другому окну до тех
пор, пока текущее окно активно (по умолчанию
- False).
Absolute align – определяет тип выравнивания ок-
на. True – относительно родительского окна,
False – относительно экрана.
Disabled – определяет блокировку окна. Если окно
заблокировано, то пользователь не может ини-
циализировать какие-либо события в окне (по умолчанию - False).
Context help – отображает вопросительный знак в заголовке окна.
Set Foreground – отображает окно на переднем плане. Изменяется в программе с помощью функции
SetForegroundWindow (по умолчанию - False).
3D-look – устанавливает обычное начертание символов в диалоговом окне и устанавливает объёмные
границы у элементов управления (по умолчанию - False).
No fail create – отменяет сообщения об ошибках (по умолчанию - False).
No idle message – отменяет WM_ENTERIDLE сообщения (по умолчанию - False).
Control – определяет, является ли диалоговое окно дочерним (по умолчанию - False).
Center mouse – при загрузке отображает диалоговое окно так, чтобы указатель мыши располагался в
центре окна (по умолчанию - False).
Local edit – определяет, что средство управления окна редактирования в диалоговом окне будет ис-
пользовать память в сегменте данных приложения (по умолчанию - False).

Выжол Ю.А.
Visual C++ Лекция 2 6
Tool window – используется для перемещаемых
панелей инструментов. В заголовке использу-
ется меньший шрифт (по умолчанию - False).
Client edge – отображает утопленную границу диа-
логового окна (по умолчанию - False).
Static edge – отображает утопленную границу до-
чернего окна (по умолчанию - False).
Transparent – определяет прозрачный стиль окна
(по умолчанию - False).
Control parent – позволяет пользователю перемещаться между дочерними формами с помощью кла-
виши Tab (по умолчанию - False).
No parent notify – отменяет WM_PARENTNOTIFY сообщения от дочернего окна к родительскому (по
умолчанию - False).
Немодальные диалоговые окна
Большинство диалоговых окон, которые приходится включать в состав приложения, относятся к так
называемым модальным окнам. Модальное окно выведено всегда поверх всех остальных окон на экране.
Пользователь должен поработать в этом окне и обязательно закрыть его прежде, чем приступить к работе
в любом другом окне этого же приложения. Примером может служить окно, которое открывается при вы-
боре команды File ► Open любого приложения Windows.
Немодальное диалоговое окно позволяет пользователю, не закончив работы с ним, "перепрыгнуть" в
другое окно приложения, сделать там нечто и затем снова вернуться в немодальное окно и продолжить
операцию. Типичными немодальными окнами являются те, которые открываются при отработке команд
Edit ► Find (Правка ► Поиск) и Edit ► Replace (Правка ► Замена) во многих приложениях Windows.
Организация работы с немодальным окном намного сложнее организации работы с модальным.
Программировать работу с таким объектом, как диалоговое окно, - экземпляром соответствующего класса
– нужно очень аккуратно. Как правило, они создаются оператором new, а удаляются – оператором
delete при обработке щелчка мышью на кнопке ОК или Cancel. Разработчику придется перегрузить
большинство функций-членов класса диалогового окна. Короче, прежде, чем приступать к программиро-
ванию с немодальными окнами, нужно достаточно хорошо освоить приемы программирования модальных
окон.
Вывод диалогового окна на экран
Для вывода диалогового окна, например IDD_OPTIONS, на экран нужно выполнить следующие
операции:
В заголовке файла класса диалогового окна, из которого вы хотите открыть диалоговое окно
IDD_OPTIONS, нужно объявить заголовочный файл Options.h. Синтаксис объявления заголо-
вочного файла имеет вид:
#include "имя заголовочного файла" например:
#include "Options.h"
Создать объект, с помощью которого вы хотите вывести диалоговое окно на экран, например кнопку
IDC_OPTIONS
Создать процедуру обработки события, например, щелчка на
кнопке IDC_OPTIONS. Для этого сделайте двойной щелчок на
кнопке в режиме конструктора. В открывшемся диалоговом окне
Add Member Function щёлкните на кнопке OK.
В процедуре обработки события щелчка на кнопке
IDC_OPTIONS, нужно создать экземпляр класса диалогового
окна, синтаксис которого имеет вид:
<имя класса> <имя экземпляра класса>; например:
COptions dlg;
отобразить диалоговое окно IDD_OPTIONS на экране с помощью функции DoModal, синтаксис
команды имеет вид:
[<переменная>=]<имя экземпляра класса> . DoModal() например:
int rez = dlg.DoModal();
Синтаксис функции DoModal имеет вид:

Выжол Ю.А.
Visual C++ Лекция 2 7
virtual int DoModal() – открывает модальное диалоговое окно и если в открытом диалоговом
окне нажата кнопка ОК или Cancel возвращает значения соответствующие константам IDOK и
IDCANCEL соответственно; возвращает –1, если функция не может открыть диалоговое окно.
Обработать события закрытия диалогового окна IDD_OPTIONS можно с помощью, например,
условного оператора и выводом сообщений с помощью функции AfxMessageBox :
if (rez==IDOK) AfxMessageBox("Вы нажали кнопку ОК");
else AfxMessageBox("Вы нажали кнопку Отмена");

Выжол Ю.А.

Вам также может понравиться