Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Урок 37. Стандартный диалог для открытия/сохранения файла / Уроки MFC / Visual C++
Visual C++. MFC Урок 37. Стандартный диалог для открытия/сохранения файла
На этом занятии мы с вами посмотрим, как можно использовать в ваших программах стандартные диалоги для открытия и сохранения файла. Эти диалоги, наряду с далогами для выбора цвета, для поиска и замены, для выбора шрифта являются стандартными диалогами Windows. Они уже существуют в недрах операционной системы, причем их внешний вид зависит от версии Windows (например, в одних версиях Windows их размер можно менять, а в других - нет).
Для диалогов, предназначенных для открытия и сохранения файла, предназначен один и тот же класс - CFileDialog. Сейчас мы с вами и посмотрим, как с ним можно работать.
Запустите Visual C++ и создайте новый проект типа MFC AppWizard (EXE). Для определенности задайте ему имя CFileDialog. На первом шаге мастера выберите тип проекта, основанный на диалоге. В последующих шагах мастера все оставьте без изменений, только на шаге 2 уберите галочку ActiveX Controls (они нам не нужны, так что не будем усложнять себе код).
После создания проекта перейдите на вкладку ResourceView и добавьте к нашему проекту меню с одним пунктом (добавляем меню верхнего уровня Options и его подменю FileOpen):
Имя идентификатора для меню можно оставить без изменений (IDR_MENU1).
Наше меню еще не подсоединено к форме. Для его подсоединения выберете идентификатор меню (IDR_MENU1) в combobox'е menu в окне свойств нашего диалогового окна:
Теперь добавьте обработчик для добавленного пункта меню FileOpen (с помощью ClassWizard'а).
Приступаем к написанию кода. В созданный обработчик добавьте следующий код:
void CCFileDialogDlg::OnOptionsFileopen()
{
// TODO: Add your command handler code here CFileDialog dlg(TRUE);
dlg.DoModal();
}
В написанном коде пояснений требует разве что конструктор. Он, как вы видите вызывается с параметром TRUE. Это означает, что будет создан стандартный диалог для открытия файлов. Если же в качестве параметра указать FALSE, то создастся стандартный диалог для сохранения файла (Save As...).
Программу можно запустить - при выборе нашего пункта меню будет показан диалог для открытия файла.
Теперь посмотрим, как можно изменять свойства диалогового окна. За это отвечает свойство m_ofn. Давайте, для примера, создадим диалоговое окно с заголовком "Открытие 123-файлов", с фильтрами для показа 123- и всех файлов и с начальной директорией c:\tmp. Кроме того, после закрытия диалогового окна мы покажем в messagebox'ах имя выбранного файла (с путем и без).
...
CFileDialog dlg(TRUE);
//Создаем фильтр
dlg.m_ofn.lpstrFilter="123-файл\0*.123\0Все файлы\0*.*\0\0";
//Делаем активным фильтр "Все файлы|*.*"
dlg.m_ofn.nFilterIndex=2;
//Задаем начальную директорию
dlg.m_ofn.lpstrInitialDir="c:\\tmp";
//Задаем заголовок диалогового окна
dlg.m_ofn.lpstrTitle="Открытие 123-файлов";//Показывваем диалог
dlg.DoModal();
//Показываем имя открытого файла без пути
MessageBox(dlg.m_ofn.lpstrFileTitle);
//Показываем имя открытого файла с полным путем
MessageBox(dlg.m_ofn.lpstrFile);
...
Назначение параметров ясно из комментариев. Обратите внимание на то, как задается фильтр. Он делится на пары строк - описание фильтра и расширения файлов, каждая такая строка заканчвается на нуль-символ (\0), в конце же этого свойства мы должны поставить два нуль-символа. Отметьте также, что нумерация для задания начального фильтра (подсвойство nFilterIndex) начинается с единицы.
После запуска программы наш стандартный диалог окно будет выглядеть приблизительно так:
Диалог для сохранения файлов работает точно также. Как уже говорилось, для его создания необходимо в конструкторе указать параметр FALSE.