
- •Задание 6. Добавление обработчиков сообщений для кнопок панели инструментов
- •Обработчики сообщений для кнопок панели инструментов программы MyPaint
- •Строка состояния
- •Задание 7. Добавление строки состояния
- •Отображение полей строки состояния
- •Изменение интерактивной справки
- •Подведение итогов
- •Глава 6. Создание модальных диалоговых окон
- •Диалоговые окна и ресурсы шаблонов диалоговых окон
- •Задание 1. Создание ресурса шаблона диалогового окна программы FontDemo
- •Элементы управления диалогового окна Format и их свойства
- •Классы диалоговых окон
- •Функции класса cDialog для управления диалоговыми окнами
- •Функции класса cDialog для манипулирования диалоговыми окнами
Подведение итогов
В этой главе описаны способы добавления перемещаемых панелей инструментов и строк состояния в MFC-программы. Перечислим основные положения.
При создании новой программы с помощью мастера MFC Application Wizard в нее можно включить перемещаемую панель инструментов и/или исходную строку состояния. Перемещаемая панель содержит кнопки, позволяющие быстро выполнять команды меню и прикреплять данную панель к любому краю окна или превращать ее в свободно перемещаемое окно. Строка состояния отображает интерактивную справку для команд меню и кнопок панели инструментов, а также показывает состояние некоторых клавиш.
При добавлении перемещаемой панели инструментов к существующей программе используйте редактор панели инструментов Microsoft Development Environment для разработки рисунка каждой кнопки панели.
Чтобы добавить в программу панель инструментов, необходимо определить объект класса CToolBar как член класса главного окна, а затем создать и инициализировать панель инструментов, вызвав функции CToolBar::Create() и CToolBar::Load-Toolbar(). Они вызываются в классе главного окна из функции CMainFrame::OnCreate(), обрабатывающей сообщение WM_CREATE.
Для придания панели инструментов свойства перемещаемости из функции CMainFrame::OnCreate() вызываются методы EnableDocking() класса CControlBar, EnableDocking() класса CFrameWnd и DockControlBar() класса CFrameWnd.
Обработчики сообщений для команд панели инструментов определяются таким же образом, как и обработчики сообщений для команд меню.
К существующей MFC-программе можно добавить строку состояния, определив экземпляр класса CStatusBar как член класса главного окна, а затем вызвав функции Create()и SetIndicators()класса CStatusBar из обработчика сообщения CMainFrame::OnCreate() класса главного окна.
Глава 6. Создание модальных диалоговых окон
В этой главе рассматриваются вопросы:
создание ресурсов шаблона диалогового окна;
создание класса диалогового окна, производного от CDialog;
связывание элементов управления с переменными-членами класса диалогового окна;
создание обработчиков сообщений, посылаемых элементами управления своему окну-владельцу;
отображение модальных диалоговых окон;
передача и проверка данных в процессе работы с диалоговыми окнами;
изменения в классах документа и представления, связанные с работой диалоговых окон.
Диалоговые окна и ресурсы шаблонов диалоговых окон
Практически все Windows-приложения взаимодействуют с пользователем при помощи диалоговых окон. Диалоговое окно — это окно, которое принимает сообщения и отрабатывает команды во время обмена данными с приложением. Диалоговое окно открывается при наличии открытого главного окна программы. Существует два типа диалоговых окон: модальные (modal) и немодальные (modeless). На период взаимодействия пользователя с открытым модальным диалоговым окном его окно-владелец становится недоступным и работа приложения приостанавливается. Для продолжения работы приложения необходимо закрыть модальное диалоговое окно. Открытие немодального диалогового окна не останавливает работу приложения, делая недоступным владельца этого диалогового окна. Немодальные диалоговые окна остаются в верхней части своих окон-владельцев, даже если это окно получило фокус ввода, т.е. является активным. Кроме модальных и немодальных диалоговых окон в Windows существуют специальные диалоговые окна, называемые окнами сообщений, которые отображают информационное сообщение для пользователя и предоставляют ограниченное количество вариантов выбора решений (обычно OK или Cancel). Диалоговое окно отличается от окна представления тем, что диалоговое окно всегда связано с ресурсом Windows, идентифицирующим и определяющим структуру окна. Для каждого диалогового окна в приложении создается ресурс шаблона диалогового окна и класс диалогового окна. Диалоговое окно содержит элементы управления (controls). Ресурс шаблона диалогового окна используются программой для того, чтобы вывести на экран его изображение и изображения элементов управления. Ресурс шаблона диалогового окна определяет стиль, расположение и размер диалогового окна, а также список всех его элементов управления. Ресурсы шаблона диалогового окна создаются с помощью визуального редактора ресурсов (Resource Editor) и являются частью файла ресурсов приложения.
Для создания ресурсов шаблонов диалоговых окон имеется большой набор элементов управления, которые вставляются в ресурс шаблона диалогового окна. Технология их создания WYSIWYG (What You See Is What You Get — «Что видишь, то и получишь») позволяет выбирать нужные элементы, размещать их в ресурсе шаблона диалогового окна в нужном месте и получать готовое диалоговое окно. Обзор типовых элементов управления, которые используются в любом приложении Windows, и кнопки панели Toolbox, с помощью которых можно создать эти элементы управления, показаны на рис. 6.1.
Рис. 6.1. Кнопки элементов управления панели инструментов
Рассмотрим элементы управления диалогового окна.
Кнопка (Button) используется для немедленного выполнения некоторой задачи.
Флажок (Check Box) используется для задания или отмены опции, которая не связана с другими опциями.
Переключатель (Radio Button) используется для выбора одного параметра из группы взаимоисключающих.
Поле (Edit Control) — элемент управления, который позволяет вводить текст и предоставляет средства его редактирования. Если в окне Properties диалогового окна в поле Multiline выбрать значение True, то можно ввести в поле несколько строк, что позволяет использовать его в качестве небольшого текстового редактора.
Расширенное поле (Rich Edit Control) — поле, в котором можно применять форматирование символов и абзацев текста.
IP-адрес (IP-Address Control) — поле, содержащее четыре отдельных поля, облегчающих ввод IP-адреса, например 255.816.1.1.
Поле со списком (Сombo Box) состоит из поля и отображаемого под ним списка. Поле с раскрывающимся списком (Dropdown) состоит из поля и списка, появляющегося только после щелчка на стрелке справа от поля. Статическое поле со списком (Drop List) состоит из надписи (с рамкой) и списка, появляющегося при щелчке на стрелке.
Расширенное поле со списком (Extended Combo Box) позволяет в качестве элементов списка отображать рисунки.
Список (List Box) — окно, в котором отображается прокручиваемый список элементов. Разновидность списка (List Control) отображает набор значков с текстовыми метками. Примером такого списка является правая панель окна Windows Explorer.
Рисунок (Picture Control) — элемент управления, отображающий пустую прямоугольную рамку, закрашенную прямоугольную область или значок.
Надпись (Static Text) отображает строку текста. Обычно она используется как метка поля или элемента управления другого типа.
Рамка (Group Box) — это рамка с надписью, используемая для группирования набора связанных элементов управления. Рисунки, надписи и группы не принимают информацию, вводимую пользователем.
Полоса прокрутки (Horizontal Scroll Bar, Vertical Scroll Bar) используется для отображения горизонтальных или вертикальных полос прокрутки в любом месте диалогового окна.
Регулятор (Slider Control) содержит шкалу со специальным бегунком, который можно перетаскивать для коррекции значений.
Счетчик (Spin Control) состоит из пары кнопок со стрелками. Он увеличивает или уменьшает на единицу какое-либо значение. Стрелки можно ориентировать вертикально или горизонтально.
Индикатор (Progress Control) изображается набором прямоугольников, количество которых увеличивается по мере протекания определенного процесса (печати документа или записи файла).
Горячая клавиша (Hot Key) — окно, позволяющее пользователю вводить комбинации клавиш, используемых как горячие клавиши.
Набор вкладок (Tab Control) используется для добавления к диалоговому окну страниц с вкладками.
Дерево (Tree Control) отображает список в виде дерева объектов, аналогично окну Windows Explorer.
Анимационный элемент (Animation Control) — небольшое окно, отображающее видеоклип в стандартном формате AVI (Audio Video Interleaved).
Элемент даты и время (Date Ttime Picker) облегчает ввод даты и времени. Если он используется для ввода даты, то содержит раскрывающийся список с календарем для ее выбора. Если же он используется для ввода времени, то содержит счетчики для настройки времени.
Месячный календарь (Month Calendar Control) — элемент управления отображает календарь, позволяющий выбрать месяц, а затем дату.
Пользовательский элемент (Custom Control) — элемент управления, созданный и запрограммированный пользователем (или независимым поставщиком). Его фактический вид и поведение не проявятся до запуска программы.
Чтобы добавить элемент управления определенного типа в ресурс шаблона диалогового окна, щелкните на соответствующей кнопке панели инструментов Toolbox (рис. 6.1), а затем на интересующем вас месте внутри шаблона диалогового окна. Элемент управления помещается в указанную позицию. При установке свойств элемента управления выполните на нем щелчок и, если окно свойств было открыто, то отобразятся соответствующие значения свойств. Введите идентификатор элемента управления и все его дополнительные свойства, которые не устанавливаются по умолчанию (табл. 6.1). Если добавленный элемент управления необходимо удалить, выберите его щелчком мыши, а затем нажмите клавишу Del.
При вводе надписи элемента управления используйте символ & перед определенным символом, например, &Bold, для подчеркивания его при отображении надписи элемента управления. Активизировать элемент управления в открытом диалоговом окне можно нажатием клавиши Alt и клавиши, соответствующей подчеркнутому символу. Если элементом управления является флажок или переключатель, то указанная комбинация клавиш устанавливает элемент управления. Если элементом управления является кнопка, то нажатие указанных клавиш равносильно непосредственному щелчку на кнопке; если элементом управления является текстовое поле, то курсор размещается в первом в порядке обхода поле.
При добавлении элемента Static Text редактор диалоговых окон предлагает стандартный идентификаторы IDC_STATIC. Если в программе отсутствует ссылка на эти элементы, то уникальные идентификаторы им не нужны и их можно не менять.
Для управления порядком выбора элементов управления, расположенных в диалоговом окне, необходимо задавать порядок их обхода. При его установке каждому элементу управления задаются последовательные номера. Первый по порядку обхода элемент имеет номер 1. Установка порядка обхода позволяет пользователю управлять выбором элементов управления диалогового окна с помощью клавиатуры следующим образом.
Порядок обхода элементов управления определяет последовательность получения элементами управления фокуса ввода при нажатии клавиш Tab или Shift+Tab. Нажатие клавиши Tab перемещает фокус ввода на следующий элемент управления. Комбинация клавиш Shift+Tab перемещает фокус на предыдущий элемент управления. Когда фокус ввода находится на конкретном элементе управления, последний отвечает за ввод данных с клавиатуры. Так, например, переместив фокус ввода на кнопку, можно выполнить ее команду, нажав клавишу пробела.
Порядок обхода используется для выбора элемента управления внутри группы. Например, при выборе одного переключателя из группы нажатием клавиш со стрелками (, , , ) автоматически удаляется отметка с предыдущего выбранного переключателя этой группы.
Если надпись элемента управления содержит подчеркнутый символ (т. е. этому символу предшествует & в определении элемента), то нажатие клавиши Alt и клавиши, соответствующей этому символу, перемещает фокус в следующее в порядке обхода поле. Таким образом, элемент управления, используемый как метка, должен предшествовать в порядке обхода связанному с ним полю. Подчеркнутый символ называют мнемоническим.
Рис. 6.2. Окно программы FontDemo
Рассмотрим вопросы создания и отображения модального диалогового окна на примере программы FontDemo. Эта программа отображает несколько строк текста внутри окна представления, используя системный шрифт Windows (рис. 6.2).
Если в меню Text программы FontDemo выбрать команду Format или нажать клавиши Ctrl+F, то программа отобразит диалоговое окно Format, позволяющее изменять способ форматирования текста в окне представления (рис. 6.3).
Рис. 6.3. Диалоговое окно Format программы FontDemo
Диалоговое окно Format задает начертание символов (полужирное, курсив, подчеркнутое или любую их комбинацию), выравнивание строк (влево, по центру или вправо), ширину символов (переменная или фиксированная) и интервал между строками (можно ввести значения интервала 1, 2 или 3). При изменении любого параметра в диалоговом окне Format текст в области Sample немедленно переформатируется с учетом заданных параметров. Если щелкнуть на кнопке OK, то диалоговое окно закроется, а в главном окне отобразится этот же текст, форматируемый в соответствии с выбранными в диалоговом окне параметрами. Если щелкнуть на кнопке Cancel, кнопке закрытия диалогового окна, выбрать команду Close в системном меню или нажать клавишу Esc, то диалоговое окно закроется, но текст в главном окне не изменится.
При отображении диалогового окна Format нельзя активизировать главное окно программы или выбрать какую-либо команду меню. (Если попытаться сделать это, программа подаст звуковой сигнал.) Чтобы продолжить работу в главном окне, необходимо закрыть диалоговое окно. Таким образом, диалоговое окно, создаваемое в программе FontDemo, является модальным.