Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Visual C++ 6. Руководство Разработчика [rus]

.pdf
Скачиваний:
303
Добавлен:
16.08.2013
Размер:
4.96 Mб
Скачать

Одним из важнейших элементов приложений Windows является меню, которое представляет простой и понятный способ группировки команд и опций программы. Для выбора команды достаточно щелкнуть на требуемом элементе меню. Некоторые команды приводят к последующему появлению диалоговых окон, содержащих дополнительные наборы опций и команд.

Меню, создаваемое в этом параграфе, будет использовано в следующей главе при разработке готового приложения.

Что такое меню

Меню — это список команд и опций программы. Выбрать элемент меню можно с помощью мыши или различных сочетаний клавиш. В ответ на это Windowsпошлет щриложению сообщение с указанием того, какой элемент был задействован.

Создание меню

Разработать меню приложения можно с помощью соответствующего редактора ресурсов, который позволяет проектировать меню в визуальной форме. Альтернативный вариант — использование текстового редактора, в котором набирается описание меню на языке описания ресурсов.

Редактор ресурсов может читать описания меню из файла сценария ресурсов (расширение RC) или файла скомпилированных ресурсов (расширение RES). Первый файл содержит описания ресурсов в текстовом формате. Если имеется файл заголовков с объявлениями констант, используемых в описании меню, этот файл можно включить в файл ресурсов. Например, встречающаяся ниже константа idm_about может быть определена в файле заголовков равной числу 40.

Меню piemenu, разработанное с помощью редактора ресурсов, показано на рис. 16.10.

Рис. 16.10. Создание нового меню

271

В описание меню можно включать всевозможные стили и атрибуты. Например, можно задать маркировку выбранных элементов специальными метками, указать, что определенный пункт меню изначально недоступен (выделен серым цветом) или является простой линиейразделителем и т.д.

Компиляция ресурса меню

На основании RC-файла компилятор ресурсов скомпилирует описание меню в файл ресурсов

срасширением RES. Этот файл будет использован компоновщиком для связывания ресурсов

сисполняемым файлом приложения.

Описание простейшего меню не сложно понять. Вот как выглядит файл сценария ресурса:

PIEMENU MENU DISCARDABLE BEGIN

POPUP "Pie_Chart_Data"

BEGIN

MENUITEM "About...",IDM_ABOUT

MENUITEM "Input...",IDM_INPUT

MENUITEM "Exit...", IDM_EXIT

END

END

Изучая этот листинг, вы заметите ряд ключевых слов, используемых в описаниях меню: menu (означает новый ресурс меню), popup (подменю) и menuitem(команда меню). Вместо операторов beginи endможно использовать фигурные скобки ({}). Нетрудно также понять, какие команды будут представлены в нашем меню: About..., Input... и Exit. Троеточие после названия команды означает, что ее выбор приведет к открытию диалогового окна.

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

Windows.

Ключевые слова редактора ресурсов

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

Для того чтобы связать с элементом меню клавишу быстрого вызова, в его описании перед соответствующей буквой ставится символ амперсанда (&). В нашем случае такие клавиши не задаются, но если бы мы, к примеру, написали & About. . ., то данную команду можно было бы выбрать путем нажатия клавиш [Alt+A].

При выборе подменю Windowsотображает список находящихся в нем команд, которые были указаны в описании меню с помощью ключевого слова menuitem. Справа от названия команды идет ее идентификатор или константа, содержащиеся в одном из включаемых файлов заголовков. idm— это общепринятый (но не обязательный) префикс идентификаторов команд меню.

Горячие клавиши

В большинстве приложений для быстрого вызова команд меню используются определенные сочетания клавиш. Представим себе меню, в котором содержится 12 команд, задающих различный цвет фона окна. Пользователю можно предоставить возможность изменять цвет обычным способом, т.е. посредством меню, или — как альтернативный путь — нажатием различных комбинаций клавиш, скажем от [F1] до [F12].

Диалоговые окна

Меню предоставляет пользователям простейший способ взаимодействия с программой. Более совершенным методом передачи данных в программу является использование диалоговых окон. В диалоговом окне пользователь может выбирать опции из списка, устанавливать

272

различные флажки, вводить в поля текст и числовые значения и многое другое. Диалоговые окна не только служат ключевым средством ввода данных в программу, но и существенно облегчают программирование, так как многие операции с элементами управления диалоговых окон в Windows автоматизированы.

Чтобы открыть диалоговое окно, достаточно, как правило, выбрать соответствующую команду меню. Подобные команды обозначаются символами троеточия после их названия. Так, в предыдущем примере таковыми были About... и Input....

Рис. 16.12. Заготовка диалогового окна Ниже приведено описание диалогового окна из файла ресурсов.

PIEDLGBOX DIALOG DISCARDABLE 93,37,195,159

STYLE DS_MODALFRAME I WS_POPOP I WS_VISIBLE | WS_CAPTION I WS_SYSMENU CAPTION "Pie Chart Data"

FONT 8, "MS Sans Serif" BEGIN

GROOPBOX "Chart Title:",100, 5, 3, 182, 30,WSJTABSTOP GROUPBOX "PieWedge Sizes:",101,3, 34,187,95,WSJTABSTOP LTEXT "Title:", -1,10,21, 30, 8

EDITTEXT DMJTITLE, 40, 18,140, 12

LTEXT "Wedge #1:", -I,10,50,40,8, NOT WS_GROUP

273

LTEXT "Wedge #2:", -1,10,65,40,8, NOT WS_GROUP

LTEXT "Wedge #3:", -1,10,80,40,8, NOT WS_GROUP

LTEXT "Wedge #4:", -1,10,95,40,8, NOT WS_GROUP

LTEXT "Wedge #5:", -1,10,110, 40,8, NOT WS_GROUP

LTEXT "Wedge #6:", -1,106,50, 40,8, NOT WS_GROUP

LTEXT "Wedge #7:", -1,106,65,40,8, NOT WS_GROUP

LTEXT "Wedge #8:", -1,106,80, 40,8, NOT WS_GROUP

LTEXT "Wedge #9:", -1,106,95,40,8, NOT WS_GRODP

LTEXT "Wedge 110:",-1,102, 110, 45,8, NOT WS_GROUP

EDITTEXT DM_P1, 55,45,30,12

EDITTEXT DM_P2, 55,60, 30, 12

EDITTEXT DM_P3, 55,75,30,12

EDITTEXT DM_P4, 55,90,30,12

EDITTEXT DM_P5, 55,105, 30,12

EDITTEXT DM_P6, 150, 44,30, 12

EDITTEXT DM_P7, 150, 61,30,12

EDITTEXT DM_P8, 150, 76,30,12

EDITTEXT DM_P9,. 149,91, 30, 12

EDITTEXT DM_P10, 149,106,30,12

PUSHBUTTON "ОК", IDOK, 39,135, 24,14

PUSHBUTTON "Cancel", IDCANCEL, 122,136,34,14

END

Описания диалоговых окон обычно создаются редактором ресурсов автоматически. Причем редактор может читать описания окон как в текстовом (RC-файл), так и в скомпилированном (RES-файл) виде.

Принципы работы диалоговых окон

Диалоговое окно представляет собой дочернее окно программы, которое появляется при выборе пользователем соответствующей команды из меню. Диалоговые окна разделяются на два основных типа: модальные и немодальные. В большей мере распространены первые. В случае открытия модального диалогового окна все другие окна и команды приложения становятся недоступными до тех пор, пока пользователь не закончит работу с этим окном, обычно щелчком на кнопке ОК или Cancel. При нажатии кнопки ОК запускается процедура обработки новых данных, введенных пользователем, тогда как нажатие кнопки Cancel возвращает программу к исходному состоянию, а все введенные данные отменяются. В Windows с кнопками ОК и Cancel связаны стандартные идентификаторы idok и idcancel со значениями 1 и 2 соответственно.

Немодальные диалоговые окна больше напоминают обычные окна приложений. Пользователь может свободно переходить между таким диалоговым окном и его родителем. Немодальные диалоговые окна используют в том случае, когда необходимо параллельно работать с несколькими окнами. Примером подобного окна может служить палитра цветов в редакторе растровых изображений.

Разработка диалоговых окон

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

Чтобы убедиться в целесообразности использования редактора ресурсов, еще раз обратимся к примеру диалогового окна, описание которогЬ мы рассматривали чуть раньше. Сразу возникает множество вопросов: откуда взялись все эти ключевые слова? что означают эти ряды чисел? как по данному описанию можно представить себе внешний вид диалогового окна? С помощью специальных ключевых Слов и параметров нужно задать размер окна, разместить его на экране, установить в нем необходимые элементы управления и сделать еще много других действий. Вместо того чтобы набирать с клавиатуры непонятные строки, гораздо

274

проще визуально создать требуемое диалоговое окно, используя графический интерфейс редактора ресурсов. Редактор автоматически проделает всю работу за вас.

Чтобы вызвать редактор диалоговых окон, выберите в меню Insert команду Resource, а затем в списке Resourcetype— элемент Dialog. Начальный вид окна редактора показан на рис. 16.12.

В данный момент в нашем окне содержится первичный макет создаваемого диалогового окна. На рис. 16.13 показан промежуточный этап его редактирования. Расположение кнопок было изменено, как и размер окна.

Рис. 16.13. Диалоговое окно в процессе редактирования

Размещение элементов управления

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

Ниже перечислены все доступные элементы управления и дано их краткое описание.

Надпись (StaticText) представляет собой произвольный текст, который можно разместить в любом месте диалогового окна, например возле текстового поля, чтобы указать его назначение.

Рамка (GroupBox) окружает группу логически связанных элементов управления. В верхнем левом углу рамки автоматически добавляется надпись.

275

Флажок (CheckBox) представляет собой маленькое квадратное поле, в котором можно устанавливать и снимать метки. Справа от флажка автоматически добавляется надпись. Обычно используются группы флажков, представляющих наборы взаимосвязанных опций.

Поле со списком (ComboBox) — это комбинация двух элементов управления: поля и списка. С его помощью пользователь может либо выбирать элемент из списка, либо добавлять в список новый элемент.

Горизонтальная полоса прокрутки (HorizontalScrollBar) обычно используется для просмотра больших блоков текста или графических изображений, не помещающихся в отведенной им области окна.

Счетчик (Spin) представляет собой комбинацию двух кнопок со стрелками. Обычно со счетчиком связано поле для ввода числовых значений. Щелчок на соответствующей кнопке счетчика приводит к увеличению или уменьшению значения в поле.

Регулятор (Slider) состоит из горизонтальной или вертикальной полосы и бегунка на ней. Регулятор обычно используется для пошагового изменения связанного с ним значения в заданном диапазоне.

Четырехрежимный список (ListControl) представляет собой прямоугольную область со списком значков, которые можно отображать в увеличенном или уменьшенном виде, выстраивать друг под другом или рядом, располагать в виде простого списка или в виде таблицы с возможностью сортировки по различным столбцам.

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

Расширенное поле (RichEdit) позволяет вводить многострочные блоки текста. Введенный текст можно форматировать, внедрять в него OLE-объекты.

Рисунок (Picture) — это прямоугольная область, куда может быть вставлено графическое изображение.

Поле (EditBox) — это прямоугольная область, в которую пользователь может вводить текст. Поступающий текст может интерпретироваться как набор символов или как число (в этом случае автоматически производится проверка правильности ввода).

Кнопки (Button) обычно служат средством выдачи команд наподобие закрытия окна или отмены выполненных установок. По умолчанию они содержат только надпись, но могут также содержать значок или небольшое изображение.

Переключатель (RadioButton) представляет собой маленький кружок, справа от которого добавляется надпись. Переключатели, как и флажки, обычно располагаются группами, но особенностью группы переключателей является то, что в ней можно выбрать только один переключатель.

Список (ListBox) представляет собой прямоугольную область с набором текстовых элементов. Таковым, в частности, является список файлов текущего каталога.

Вертикальная полоса прокрутки (VerticalScrollВаг) аналогична по назначению горизонтальной полосе прокрутки.

Индикатор (Progress) предназначен для визуального отображения хода выполнения программой какого-либо задания. Он представляет собой полосу, которая по мере выполнения задания заполняется квадратиками.

276

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

Дерево (TreeControl) отображает список элементов в виде древовидной структуры. С помощью дерева удобно отображать иерархические зависимости между объектами.

Анимацией (Animate) называется элемент управления, позволяющий отображать видеоклипы в формате AVI (audio video interleaved).

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

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

Компоновка диалогового окна

Рассмотрим кратко процесс создания простого диалогового окна About. Окно с данным названием является "визитной карточкой" приложения, содержит номер его версии и указывает обладателей авторских прав. Обычно в таком окне имеется единственная кнопка ОК, и его создание не составляет труда. Заготовка диалогового окна показана на рис. 16.15. Остается только добавить соответствующий текст и правильно разместить элементы управления.

В нашем окне About имеются элементы управления только двух типов — надписи и кнопки. Используя мышь, разместите в окне первую надпись и определите для нее подходящий размер. Затем выполните двойной щелчок внутри надписи, чтобы в открывшемся окне свойств задать ее текст (см. рис. 16.16).

277

Рис. 16.15. В макет диалогового окна добавлена надпись, указывающая, куда нужно ввести соответствующий текст

278

Рис. 16.16. Окно About после добавления текста надписи

Чтобы удалить ненужную кнопку Cancel, щелкните на ней мышью и нажмите клавишу [Del], после чего разместите кнопку ОК там, где хотите ее видеть. На рис. 16.17 показан окончательный вариант макета создаваемого диалогового окна.

279

Рис. 16.17. Окончательный вид окна About

Чтобы сохранить новое диалоговое окно, выберите в меню File команду Save. В результате будет создан файл в формате RC. Для просмотра файла сценария ресурсов можно использовать любой текстовый редактор, в том числе редактор компилятора VisualC++. Как будет выглядеть сценарий созданного нами диалогового окна About, показано ниже.

ABOUTDLGBOX DIALOG DISCARDABLE 50,300, 180, 84

STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAP.TION | WS_SYSMENU CAPTION "About"

FONT 8, "MS Sans Serif" BEGIN

CTEXT "Microsoft С Pie Chart Program", -1,3, 29,176,10

CTEXT "by William H. Murray and Chris H. Pappas", -1, 3, 16,176,10 PUSHBUTTON "ОК", IDOK, 74,51,32, 14

280