<< Предыдущая страница

Содержание

Следующая страница >>

Раздел 4. Применение библиотеки MFC для событийного программирования в Windows

Объектно-ориентированная библиотека классов Microsoft Foundation Classes призвана инкапсулировать вызовы API функций и сократить время на разработку приложений под Windows за счет наличия мастеров и удобных методов классов. Большинство вызовов API функций нашли отражение в вызовах методов соответствующих классов, так API функция MessageBox, принимающая четыре параметра, удобно записывается в виде метода класса окна CWnd и принимает всего один обязательный параметр – строку для вывода. Другим примеров служат классы объектов CGI (например CBrush, который имеет разнообразные методы для создания кисти) и класс контекста устройства -СDC, который, имеет метод SelectObject для выбора созданного объекта CGI.

Для построения приложения на основе MFC, обычно, с помощью AppWizard создается остов определенного типа приложения MFC. Затем, в такое приложение можно добавлять обработчики сообщений Windows при помощи ClassWizard.

Построение приложения MFC с главной диалоговой панелью

Созданный с помощью AppWizard каркас приложения с главной диалоговой панелью состоит из двух классов: класса, класса приложения, который наследуется от CWinApp, и класса диалога, который наследуется от CDialog. Кроме этих классов создается также ресурс диалога, на котором изначально расположены две кнопки: Ok и Cancel.

Точка входа в программу – функция WinMain скрыта в классе CWinApp, и управления при запуске программы передается в функцию InitInstance класса приложения. В этой функции создается объект класса диалога, и диалог выводится на экран методом DoModal класса диалога. Класс диалога содержит конструктор, в который передается идентификатор ресурса диалога, переопределяемую функцию OnInitDialog, которая запускается сразу после создания диалога, обработчики событий перерисовки и переопределяемый метод DoDataExchange, который используется для обмена данными между переменными объекта класса и элементами управления.

После размещения соответствующих элементов управления в ресурсе диалога, с этими элементами при помощи ClassWizard можно связать переменные класса. Обмен данными между переменными класса и элементами управления инициируется посредством вызова функции UpdateData, с аргументом “ложь” для передачи данных из переменных в элементы управления и аргументом “истина”для передачи данных из элементов управления в переменные класса. Функция UpdateData затем обращается к методу DoDataExchange.

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

Классы для работы с файлами

Для создания, записи и чтения из файла можно использовать класс CFile. Этот класс инкапсулирует вызовы API функций для работы с файлами и используется в основном для бинарного ввода и вывода. Для работы с текстом используют производный класс от CFile – CstdioFile, который имеет два добавочных метода ReadString и WriteString. Метод ReadString читает строку до символа конца строки и возврата каретки, а метод WriteString автоматически вставляет символы конца строки и возврата каретки, если в строке встречается символ новой строки ‘\n’.

Работа со строками в MFC

В MFC имеется очень удачный класс для работы со строками – Cstring. Этот класс имеет метод Format, позволяющий переводить переменные различных типов в строки, операцию склеивания строк “+”. Класс динамически увеличивает свой размер при добавлении новых символов. Переменные класса CString могут использоваться везде, где подразумевается указатель на константную строку. Для перевода объектов класса CString в числовые переменные можно использовать стандартные функции atoi, atol, atof.

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

Цель: получение навыков создания приложения Windows на основе библиотеки классов MFC, практика проектирования интерфейса на основе окон диалога.

Таблица 4

Варианты задания 4

№ варианта Задание
1 Выбор из раскрывающегося списка отображается в надписи, изменения ползунка отображается в поле редактирования.
2 Изменения счетчика отображаются в индикаторе прогресса, выбор из списка отображается в надписи.
3 Выбор переключателя отображается в списке, изменения счетчика отображается в поле редактирования.
4 Число отмеченных флажков отображается в надписи, изменения счетчика отображает индикатор прогресса.
5 В зависимости от выбора переключателя отмечается разное число флажков, это число отображается в надписи.
6 В зависимости от выбора переключателя, вводимый текст в окне редактирования отображается либо в первой, либо во второй надписи.
7 Нажатие на кнопку меняет текст в поле редактирования, изменения в горизонтальной полосе прокрутки отображаются индикатором прогресса.
8 В зависимости от выбора переключателя в рисунке отображается та или иная картинка, изменения счетчика отображаются индикатором прогресса.
9 В зависимости от выбора в списке отмечается пункт переключателя, надпись отображает текст, введенный в поле редактирования.
10 Изменения в вертикальной полосе прокрутки отображаются индикатором прогресса, число отмеченных флажков, отображаются в надписи.
11 Выбор переключателя разрешает или запрещает редактирование в окне редактирования, нажатие на кнопку меняет текст в поле редактирования.
12 Изменения счетчика отображаются в поле редактирования, выбор переключателя отображается в списке.
13 Текст, вводимый в окно редактирования, отображается в поле редактирования, изменения счетчика отображаются индикатором прогресса.
14 Выбор в раскрывающемся списке отображается в простом списке, изменения счетчика отображаются индикатором прогресса.
15 Выбор переключателя разрешает или запрещает изменения в окне редактирования, изменения полосы прокрутки отображаются в надписи.
16 Выбор переключателя дублируется соответствующим флажком, изменения ползунка отображаются в вертикальной полосе прокрутки.
17 С помощью счетчика меняется число символов доступных для ввода в окне редактирования, число отображается в поле редактирования.
18 Изменения вертикальной полосы прокрутки отображаются в поле редактирования, позиция переключателя дублируется флажками.
19 Щелчок мышью на рисунке меняет его картинку, число нажатых флажков отображается в поле редактирования.
20 Изменения счетчика отображается числом отмеченных флажков, изменения переключателя отображаются раскрывающимся списком.
21 Выбор в раскрывающемся списке отображается в переключателе, счетчик меняет число символов, доступных для ввода в окно редактирования.
22 Введенное в поле редактирования число, отображается в вертикальной полосе прокрутки, выбор в переключателе дублируется флажком.
23 Выбор в списке отображается в поле редактирования, нажатие на кнопку включает и отключает флажок.
24 Число нажатий на кнопку отображается индикатором прогресса, число нажатых флажков отображается переключателем.
25 Ввод символов в поле редактирования дублируется в окне редактирования, выбор переключателя отображается в списке.

Указания. Для использования событий вертикальной или горизонтальной полос прокрутки на вкладке «Message Map» ClassWizard в списке объектов нужно выбрать класс диалога и использовать его события WM_VSCROLL или WM_HSCROLL. Для использования окна редактирования необходимо вставить вызов функции AfxInitEdit в функцию InitInstance разрабатываемого приложения. При использовании элемента рисунок нужно изменить его идентификатор с IDC_STATIC на любой другой, наример IDC_STATIC1, в этом случае можно будет использовать ClassWizard для автоматизации работы с этим элементом. Для управлением положением переключателя из программы можно использовать функцию CheckRadioButton. Вызвать диалог открытия/сохранения файла можно с помощью класса СFileDialog. В таблице 5 приведены названия элементов управления на русском языке и их англоязычные названия.

Таблица 5

Соответствие между названиями элементов управления на русском и английском языке

Названия на русском языке Названия на английском языке
Надпись Label, Static Text
Рисунок Picture
Флажок Check Box
Переключатель, Кнопки выбора Radio Button
Поле редактирования Edit Box
Окно редактирования Rich Edit
Кнопка Button
Ползунок Slider, TrackBar
Индикатор прогресса Progress Bar
Полоса прокрутки Scroll Bar
Счетчик Spin, Up-Down
Раскрывающийся список, Комбинированный список Drop-Down List, Combo Box List
Список List