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.
Читать дальше