Microsoft Visual C++ и MFC. Программирование для Win95 и WinNT

         

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


Создание объекта класса CFileDialog еще не вызывает отображения соответствующей диалоговой панели. Для этого необходимо воспользоваться специальным методом DoModal класса CFileDialog.

Виртуальный метод DoModal, первоначально определенный в классе CDialog, переопределен в классе CFileDialog:

virtual int DoModal();

При вызове метода DoModal для ранее созданного объекта класса CFileDialog на экране открывается соответствующая диалоговая панель. После того, как вы закончите работать с диалоговой панелью и закроете ее, метод DoModal вернет значения IDOK или IDCANCEL в случае успешного завершения и 0 - в случае возникновения ошибок.

Если вы выберите имя файла и нажмете кнопку Open (для панели Open) или кнопку Save (для панели Save As), метод DoModal вернет значение IDOK. Если вы решите отменить выбор файла и нажмете кнопку Cancel или выберите из меню диалоговой панели строку Close, метод DoModal вернет значение IDCANCEL.

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

Метод

Описание

GetPathName

Определяет полный путь выбранного файла

GetFileName

Определяет имя выбранного файла

GetFileExt

Определяет расширение имени выбранного файла

GetFileTitle

Позволяет определить заголовок выбранного файла

GetNextPathName

Если диалоговая панель позволяет выбрать сразу несколько файлов, то метод GetNextPathName можно использовать для определения полного пути следующего из выбранных файлов

GetReadOnlyPref

Позволяет узнать состояние атрибута “только читаемый” (read-only) выбранного файла

GetStartPosition

Возвращает положение первого элемента из списка имен файлов

 

Наиболее важный метод из представленных в таблице - GetPathName. Он получает полный путь файла, выбранного из диалоговых панелей Open или Save As:

CString GetPathName() const;

Как мы уже говорили, диалоговые панели Open и Save As можно использовать для выбора нескольких файлов. Для этого, в поле Flags структуры m_ofn должен быть установлен флаг OFN_ALLOWMULTISELECT. Тогда метод GetPathName возвращает массив строк, состоящий из нескольких строк, заканчивающихся двоичным нулем. Первая из данных строк содержит путь к каталогу, в котором расположены выбранные файлы, остальные строки содержат имена выбранных файлов. Естественно, с тем чтобы выделить путь к каталогу проблем не возникает, а чтобы получить имена выбранных файлов, вы должны использовать методы GetStartPosition и GetNextPathName.


Метод GetStartPosition  возвращает значение типа POSITION. Оно предназначено для передачи методу GetNextPathName и получения очередного имени выбранного файла. Если пользователь не выбрал ни одного файла, метод GetStartPosition возвращает значение NULL:

POSITION GetStartPosition() const;

Значение, полученное методом GetStartPosition, следует записать во временную переменную типа POSITION и передать ссылку на нее методу GetNextPathName:

CString GetNextPathName(POSITION& pos) const;

Метод GetNextPathName вернет полный путь первого, из выбранных в диалоговой панели файлов, и изменит значение переменной pos, переданной методу по ссылке. Новое значение переменной pos можно использовать для последующих вызовов метода GetNextPathName и получения полных путей всех остальных выбранных файлов. Когда метод GetNextPathName вернет имена всех выбранных файлов, в переменную pos записывается значение NULL.

В отличие от метода GetPathName, метод GetFileName позволяет определить только имя выбранного файла, без пути и расширения:

CString GetFileName() const;

Метод GetFileExt возвращает только расширение файла, выбранного в диалоговой панели:

CString GetFileExt() const;

Метод GetFileTitle позволяет получить полное имя файла, включая его расширение:

CString GetFileTitle() const;

В стандартных диалоговоых панелях Open и Save As имеется переключатель Read Only. Заметим, что по умолчанию этот переключатель не отображается. Если вы желаете воспользоваться этим переключателем, флаг OFN_HIDEREADONLY должен быть сброшен.

Метод GetReadOnlyPref позволяет определить положение переключателя Read Only. Если переключатель включен, то метод GetReadOnlyPref возвращает ненулевое значение. В противном случае GetReadOnlyPref возвращает нуль:

BOOL GetReadOnlyPref() const;


Содержание раздела