Чтение онлайн

на главную - закладки

Жанры

Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT. Часть 2

Фролов Григорий Вячеславович

Шрифт:

mFileOpen.m_ofn.Flags |= OFN_ALLOWMULTISELECT;

Метод DoModal класса CFileDialog отображает на экране соответствующую диалоговую панель (в нашем случае диалоговую панель Open) и позволяет пользователю выбрать из нее один или несколько файлов. Результат работы метода DoModal записывается в переменную result:

int result = mFileOpen.DoModal;

Если пользователь отказался от выбора файлов и нажал кнопку Cancel, тогда метод DoModal возвращает значение IDCANCEL. В этом случае приложение отображает сообщение File not selected и завершает свою работу:

AfxMessageBox("File not selected");

Если пользователь выбрал из диалоговой панели Open

один или несколько файлов и нажал кнопку Open, тогда метод DoModal возвращает значение IDOK. В этом случае вызывается метод GetStartPosition, который записывает в переменную pos типа POSITION значение, необходимое методу GetNextPathName для получения всех имен выбранных файлов:

POSITION pos;

pos = mFileOpen.GetStartPosition;

Переменная pos передается методу GetNextPathName. Этот метод получает очередное имя выбранного файла и изменяет значение переменной pos. До тех пор, пока значение pos не станет равно NULL, метод GetNextPathName вызывается в цикле и получает очередное имя файла:

while (pos != NULL) {

 // Получаем имя очередного файла

 msg = mFileOpen.GetNextPathName(pos);

 // Отображаем имена файлов

 AfxMessageBox("Selected File – " + msg);

}

Полученные имена файлов отображаются на экране с помощью функции AfxMessageBox. Обратите внимание, что в качестве параметра этой функции передается результат операции конкатенации строки Selected File и объекта класса CString.

Виртуальные методы класса CFileDialog

В классе CFileDialog определен ряд виртуальных методов, которые вы можете переопределить по своему усмотрению. Эти методы вызываются для объектов класса, когда происходят соответствующие события.

Метод Описание
OnShareViolation Вызывается в случае нарушения прав доступа к файлу
OnFileNameOK Вызывается для проверки имени файла, введенного в диалоговой панели
OnLBSelChangedNotify Вызывается при изменении выделения в списке файлов диалоговой панели
OnInitDone Вызывается для обработки сообщения WM_NOTIFY CDN_INITDONE
OnFileNameChange Вызывается для обработки сообщения WM_NOTIFY CDN_SELCHANGE
OnFolderChange Вызывается для обработки сообщения WM_NOTIFY CDN_FOLDERCHANGE
OnTypeChange Вызывается для обработки сообщения WM_NOTIFY CDN_TYPECHANGE

Прототипы перечисленных выше виртуальных методов вы можете найти в справочной системе Microsoft Visual C++.

Панель для выбора шрифта

Стандартная диалоговая панель Font предназначена для выбора шрифта. Диалоговая панель Font отображает список шрифтов, установленных в системе, и позволяет выбрать название шрифта, его начертание, кегль, выделение, цвет, набор национальных символов (рис. 4.7).

Для управления диалоговой панелью Font в библиотеку классов MFC включен класс CFontDialog. Методы этого класса можно использовать для отображения панели Font и определения характеристик шрифта, выбранного пользователем.

Рис. 4.7.

Стандартная диалоговая панель Font

Конструктор класса CFontDialog:

CFontDialog(LPLOGFONT lplfInitial = NULL, DWORD dwFlags = CF_EFFECTS | CF_SCREENFONTS, CDC* pdcPrinter = NULL, CWnd* pParentWnd = NULL);

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

Мы не станем подробно описывать параметры конструктора, вы найдете это описание в документации Microsoft Visual C++. Сейчас мы приведем только краткий обзор этих параметров. Дополнительную информацию по использованию стандартных панелей выбора шрифта вы можете получить в 14 томе “Библиотеки системного программиста”.

Параметр lplfInitial является указателем на структуру типа LOGFONT, описывающую логический шрифт. Если используете этот параметр, то в диалоговой панели Font по умолчанию будет выбран шрифт наиболее полно соответствующий шрифту, описанному в структуре LOGFONT. По умолчанию данная возможность не используется.

Параметр dwFlags задает набор флагов, управляющих различными режимами работы панели Font.

Через параметр pdcPrinter можно передать конструктору контекст отображения принтера, шрифты которого будут представлены в диалоговой панели Font. Данный параметр используется только в том случае, если в параметре dwFlags указан флаг CF_PRINTERFONTS или CF_BOTH.

Через параметр pParentWnd можно указать родительское окно для далоговой панели Font.

Методы класса CFontDialog

Для отображения диалоговой панели Font предназначен виртуальный метод DoModal:

virtual int DoModal;

Если пользователь выбрал шрифт и нажал на кнопку OK, метод DoModal возвращает идентификатор IDOK, если пользователь отменил выбор шрифта, метод DoModal возвращает идентификатор IDCANCEL.

Остальные методы класса предназначены для определения характеристик выбранного пользователем шрифта. Полное описание этих методов содержится в документации, поставляемой с Visual C++.

Метод GetCurrentFont позволяет сразу определить все характеристики выбранного щрифта, записав их в структуру LOGFONT. Вы можете найти описание структуры LOGFONT в документации SDK.

Остальные методы класса позволяют определить только отдельные характеристики выбранного шрифта. Перечислим названия этих методов.

Метод Описание
GetFaceName Возвращает имя выбранного шрифта
GetStyleName Возвращает имя стиля выбранного шрифта
GetSize Возвращает кегль выбранного шрифта
GetColor Возвращает цвет выбранного шрифта
GetWeight Возвращает плотность выбранного шрифта
IsStrikeOut Определяет является ли шрифт выделеным перечеркнутой линией
IsUnderline Определяет является ли шрифт выделеным подчеркиванием
IsBold Определяет является ли шрифт жирным
IsItalic Определяет является ли шрифт наклонным
Поделиться:
Популярные книги

Курсант: назад в СССР

Дамиров Рафаэль
1. Курсант
Фантастика:
попаданцы
альтернативная история
7.33
рейтинг книги
Курсант: назад в СССР

Чужая семья генерала драконов

Лунёва Мария
6. Генералы драконов
Фантастика:
фэнтези
5.00
рейтинг книги
Чужая семья генерала драконов

Пышка и Герцог

Ордина Ирина
Фантастика:
юмористическое фэнтези
историческое фэнтези
фэнтези
5.00
рейтинг книги
Пышка и Герцог

Имперский Курьер. Том 5

Бо Вова
5. Запечатанный мир
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Имперский Курьер. Том 5

Имя нам Легион. Том 7

Дорничев Дмитрий
7. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 7

Возвышение Меркурия

Кронос Александр
1. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия

Законы Рода. Том 11

Андрей Мельник
11. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Законы Рода. Том 11

Измена. (Не)любимая жена олигарха

Лаванда Марго
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. (Не)любимая жена олигарха

Вираж бытия

Ланцов Михаил Алексеевич
1. Фрунзе
Фантастика:
героическая фантастика
попаданцы
альтернативная история
6.86
рейтинг книги
Вираж бытия

Отмороженный 11.0

Гарцевич Евгений Александрович
11. Отмороженный
Фантастика:
боевая фантастика
рпг
попаданцы
фантастика: прочее
фэнтези
5.00
рейтинг книги
Отмороженный 11.0

История "не"мощной графини

Зимина Юлия
1. Истории неунывающих попаданок
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
История немощной графини

Крестоносец

Ланцов Михаил Алексеевич
7. Помещик
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Крестоносец

Газлайтер. Том 15

Володин Григорий Григорьевич
15. История Телепата
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Газлайтер. Том 15

Призыватель нулевого ранга

Дубов Дмитрий
1. Эпоха Гардара
Фантастика:
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Призыватель нулевого ранга